Jaka byłaby najlepsza metoda przeniesienia dowolnego elementu tablicy asocjacyjnej na początek tablicy?
Na przykład załóżmy, że mam następującą tablicę:
$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',
);
Chcę przesunąć element „one” na początek i zakończyć z następującą tablicą:
$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',
);
Jeśli masz numeryczne klucze tablicowe i chcesz ponownie zindeksować klucze tablicowe, lepiej byłoby umieścić to w
array_merge
ten sposób:$myArray = array_merge(array($key => $value) + $myArray );
źródło
Trochę późno, ale na wypadek, gdyby ktoś tego potrzebował, stworzyłem ten mały fragment.
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; }
Po prostu dostosuj go do swoich potrzeb lub użyj go i wyłącz indeks, aby się przesunął. Działa również z tablicami asocjacyjnymi.
źródło
Oto kolejna prosta jedna linijka, która robi to za pomocą
array_splice()
:$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
źródło
jeśli masz 2 tablice, pierwsza ma elementy do przeniesienia na początek drugiej tablicy elementów, możesz użyć
Oto przykładowy kod:
//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);
źródło
W komentarzach podręcznika PHP znajduje się funkcja dla array_unshift której można użyć do dodania elementu z kluczem na początku tablicy:
function array_unshift_assoc(&$arr, $key, $val) { $arr = array_reverse($arr, true); $arr[$key] = $val; return array_reverse($arr, true); }
Usuń element i włóż go ponownie za pomocą powyższej funkcji:
$tmp = $myArray['one']; unset($myArray['one']); $myArray = array_unshift_assoc($myArray, 'one', $tmp);
Bardziej ogólnym podejściem może być użycie uksort do sortowania tablicy według kluczy i udostępnienia własnej funkcji sortowania.
źródło
return = array_reverse($arr, true);