$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; }
с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; }
сfunction move_to_bottom(&$array, $key) { $value = $array[$key]; unset($array[$key]); $array[$key] = $value; }
Вы также можете посмотреть на 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) }
Вот простой один лайнер, чтобы сделать это с помощью 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' )