Как лучше всего переместить любой элемент ассоциативного массива в начало массива?
Например, скажем, у меня есть следующий массив:
$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',
);
Если у вас есть ключи числового массива и вы хотите переиндексировать ключи массива, было бы лучше поместить его
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;
источник
если у вас есть 2 массива, у 1-го есть элементы для перемещения в верхнюю часть 2-го массива элементов, вы можете использовать
Вот пример кода:
//source array $myArray = [ '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 = [ 'one' => '', 'two' => '', ]; //apply it $result = \array_replace($orderArray, $myArray); \print_r($result);
источник
В комментариях к руководству по 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);
Более общий подход может заключаться в использовании uksort для сортировки вашего массива по ключам и предоставления вашей собственной функции сортировки.
источник
return = array_reverse($arr, true);