Каким будет лучший способ перемещения любого элемента ассоциативного массива в начало массива?
Например, скажем, у меня есть следующий массив:
$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',
);
Ответ 1
Это работает:
$myArray = array('one' => $myArray['one']) + $myArray;
Ответ 2
Если у вас есть числовые ключи массива и вы хотите переделать ключи массива, было бы лучше поместить его в array_merge
следующим образом:
$myArray = array_merge(array($key => $value) + $myArray );
Ответ 3
Немного поздно, но в случае, если кому-то это понадобится, я создал этот небольшой фрагмент.
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;
}
Просто отрегулируйте его в соответствии с вашими потребностями или используйте его и отключите индекс для перемещения. Работает также с ассоциативными массивами.
Ответ 4
Вот еще один простой однострочный, который делает это с помощью array_splice()
:
$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
Ответ 5
//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);
Ответ 6
Там есть функция в комментариях руководства 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 для сортировки массива по ключам и предоставления собственной функции сортировки.
Ответ 7
Я предпочитаю array-merge с помощью решения @Mark.
$myArray = array_merge( ['one' => $myArray['one']], $myArray);