Перемещение элемента массива в PHP

$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' )