$arr = array(
'a1'=>'1',
'a2'=>'2'
);
Мне нужно переместить a2 в начало, а также сохранить a2
в качестве ключа, как бы я продолжал об этом. Я не могу представить себе способ, не вникая в что-то:)
$arr = array(
'a1'=>'1',
'a2'=>'2'
);
Мне нужно переместить a2 в начало, а также сохранить a2
в качестве ключа, как бы я продолжал об этом. Я не могу представить себе способ, не вникая в что-то:)
Вы можете достичь этого следующим образом:
$arr = array(
'a1'=>'1',
'a2'=>'2'
);
end($arr);
$last_key = key($arr);
$last_value = array_pop($arr);
$arr = array_merge(array($last_key => $last_value), $arr);
/*
print_r($arr);
will output (this is tested):
Array ( [a2] => 2 [a1] => 1 )
*/
Вот решение, которое корректно работает как с числовыми, так и с строковыми клавишами:
function move_to_top(&$array, $key) {
$temp = array($key => $array[$key]);
unset($array[$key]);
$array = $temp + $array;
}
Это работает, потому что массивы в PHP - упорядоченные карты.
Btw, чтобы перемещать элемент снизу:
function move_to_bottom(&$array, $key) {
$value = $array[$key];
unset($array[$key]);
$array[$key] = $value;
}
Вот простой один лайнер, чтобы сделать это с помощью array_splice()
и оператора union
:
$arr = array('a1'=>'1', 'a2'=>'2', 'a3' => '3');
$arr = array_splice($arr,array_search('a2',array_keys($arr)),1) + $arr;
попробуйте следующее:
$key = 'a3';
$arr = [
'a1' => '1',
'a2' => '2',
'a3' => '3',
'a4' => '4',
'a5' => '5',
'a6' => '6'
];
if (isset($arr[ $key ]))
$arr = [ $key => $arr[ $key ] ] + $arr;
результат:
array(
'a3' => '3',
'a1' => '1',
'a2' => '2',
'a4' => '4',
'a5' => '5',
'a6' => '6'
)
Вы также можете посмотреть array_multisort Это позволяет использовать один массив для сортировки другого. Это может, например, позволить вам экпортировать жестко закодированное упорядочение значений в файл конфигурации.
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
В этом примере после сортировки первый массив будет содержать 0, 10, 100, 100. Второй массив будет содержать 4, 1, 2, 3. Записи во втором массиве, соответствующие идентичным записям в первом массив (100 и 100) также были отсортированы.
Выходы:
array(4) {
[0]=> int(0)
[1]=> int(10)
[2]=> int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(4)
[1]=> int(1)
[2]=> int(2)
[3]=> int(3)
}