PHP: перемещение элемента ассоциативного массива в начало массива

Каким будет лучший способ перемещения любого элемента ассоциативного массива в начало массива?

Например, скажем, у меня есть следующий массив:

$myArray = array( 'two' => 'Blah Blah Blah 2', 'three' => 'Blah Blah Blah 3', 'one' => 'Blah Blah Blah 1', 'four' => 'Blah Blah Blah 4', 'five' => 'Blah Blah Blah 5', ); 

То, что я хочу сделать, это переместить элемент «один» в начало и в итоге получить следующий массив:

 $myArray = array( 'one' => 'Blah Blah Blah 1', 'two' => 'Blah Blah Blah 2', 'three' => 'Blah Blah Blah 3', 'four' => 'Blah Blah Blah 4', 'five' => 'Blah Blah Blah 5', ); 

Это работает:

 $myArray = array('one' => $myArray['one']) + $myArray; 

Если у вас есть числовые ключи массива и вы хотите переиндексировать ключи массива, лучше было бы поместить его в array_merge следующим образом:

 $myArray = array_merge(array($key => $value) + $myArray ); 

Немного поздно, но если кому-то это понадобится, я создал этот маленький фрагмент.

 function arr_push_pos($key, $value, $pos, $arr) { $new_arr = array(); $i = 1; foreach ($arr as $arr_key => $arr_value) { if($i == $pos) $new_arr[$key] = $value; $new_arr[$arr_key] = $arr_value; ++$i; } return $new_arr; } 

Просто отрегулируйте его в соответствии с вашими потребностями или используйте его и отключите индекс для перемещения. Работает также с ассоциативными массивами.

Вот еще один простой лайнер, который выполняется с помощью array_splice() :

 $myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray; 
 //source array $myArray = array( 'two' => 'Blah Blah Blah 2', 'three' => 'Blah Blah Blah 3', 'one' => 'Blah Blah Blah 1', 'four' => 'Blah Blah Blah 4', 'five' => 'Blah Blah Blah 5', ); // set necessary order $orderArray = array( 'one' => '', 'two' => '', ); //apply it $result = array_replace($orderArray, $myArray); print_r($result); 

Я предпочитаю слияние массива с решением @ Mark.

$myArray = array_merge( ['one' => $myArray['one']], $myArray);

В комментариях руководства PHP для array_unshift есть функция, которая может быть использована для добавления элемента с ключом в начало массива:

 function array_unshift_assoc(&$arr, $key, $val) { $arr = array_reverse($arr, true); $arr[$key] = $val; return array_reverse($arr, true); } 

Отсоедините элемент и снова вставьте его с помощью вышеперечисленной функции:

 $tmp = $myArray['one']; unset($myArray['one']); $myArray = array_unshift_assoc($myArray, 'one', $tmp); с $tmp = $myArray['one']; unset($myArray['one']); $myArray = array_unshift_assoc($myArray, 'one', $tmp); 

Более общий подход может заключаться в использовании uksort для сортировки массива по ключам и предоставления собственной функции сортировки.