Tablica asocjacyjna PHP poprzedzona kluczami literałów?


112

Czy można poprzedzić tablicę asocjacyjną parami literału klucz => wartość? Wiem, że array_unshift () działa z klawiszami numerycznymi, ale mam nadzieję na coś, co będzie działać z kluczami dosłownymi.

Jako przykład chciałbym wykonać następujące czynności:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');

Odpowiedzi:


219

Nie możesz po prostu zrobić:

$resulting_array = $array2 + $array1;

?


15
Zobacz także array_merge () i jej różnicę w porównaniu z użyciem operatora +: br.php.net/manual/en/function.array-merge.php#92602
— Havenard

2
@cletus: Sheesh. Tak, mogę. Nie jestem pewien, co sprawiło, że pomyślałem, że nie mogłem lub co wcześniej nie działało. Dzięki za odpowiedzi.
— Colin Brock,

Warto zauważyć różnicę, ale ta różnica jest istotna dla zachowania kluczy numerycznych, a ta tablica jest „czystą” tablicą asocjacyjną z kluczami łańcuchowymi.
— cletus

29

Odpowiedź brzmi nie. Nie można poprzedzić tablicy asocjacyjnej parą klucz-wartość.

Można jednak utworzyć nową tablicę zawierającą nową parę klucz-wartość na początku tablicy za pomocą operatora unii +. Rezultatem jest jednak zupełnie nowa tablica, a tworzenie nowej tablicy ma złożoność O (n).

Składnia jest poniżej.

$new_array = array('new_key' => 'value') + $original_array;

Uwaga: nie używaj funkcji array_merge (). array_merge () nadpisuje klucze i nie zachowuje kluczy numerycznych.


„zastępuje klucze i nie zachowuje kluczy numerycznych”… a) w jaki sposób operator unii („+”) obsługuje „zduplikowane” klucze? re: nie zachowuj kluczy numerycznych: prawdopodobnie pożądane
— Brad Kent

16

W swojej sytuacji chcesz użyć array_merge ():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

Aby dodać pojedynczą wartość dla tablicy asocjacyjnej, zamiast array_unshift (), ponownie użyj array_merge ():

array_merge(array($key => $value), $myarray);

5

@Cletus jest na miejscu. Wystarczy dodać, że jeśli kolejność elementów w tablicach wejściowych jest niejednoznaczna i chcesz posortować ostateczną tablicę, możesz spróbować ksortować :

$resulting_array = $array1 + $array2;
ksort($resulting_array);

4
Jako późna uwaga ksortzwraca wartość logiczną, więc powyższe należy wykonać jako dwie instrukcje, a nie jedną, np. W $a = $array1 + $array2; ksort($a);przeciwnym razie $resulting_arraybędzie wartością logiczną, a nie tablicą, której się spodziewałeś.
— El Yobo

3

Używając tej samej metody, co @mvpetrovich, możesz użyć skróconej wersji tablicy, aby skrócić składnię.

$_array = array_merge(["key1" => "key_value"], $_old_array);

Bibliografia:

PHP: array_merge ()

PHP: Arrays - Manual

Od PHP 5.4 możesz także używać składni krótkich tablic, która zamienia array () na [].

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.