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',
);
то, что я хочу сделать, это переместить элемент' one ' в начало и в конечном итоге со следующим массивом:
$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',
);
7 ответов:
Если у вас есть числовые ключи массива и вы хотите переиндексировать ключи массива, было бы лучше поместить его в
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);
в комментариях руководства 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 для сортировки массива по ключам и обеспечения собственной функции сортировки.
предпочитаю массив-слияние С решением @Mark.
$myArray = array_merge( ['one' => $myArray['one']], $myArray);
Comments