Więc jaka jest różnica między tymi 2: array_merge , znak plus (chociaż musiałem przełączać się między tablicami)?
Joseph Silber
15
Słowo ostrzeżenia dla początkujących: wynik operacji w obu przypadkach jest zerowy, jeśli którakolwiek z tablic jest pusta . Niektórzy mogą nie przejmować się tym założeniem, ponieważ jest to operacja sumująca, wynikiem będzie właściwa (niezerowa) tablica, jeśli jedna z nich jest pusta . Ale to prawda, jeśli jedna z tablic jest pustą tablicą. Dlatego uważam, że dobrą praktyką jest inicjalizacja tablic wejściowych jako pustych tablic. Co wy na to?
Sandeepan Nath,
6
Jeśli istnieją zduplikowane klucze, „biorąc unii” zawsze będzie musiał pozbyć się jednego z nich. Różnica polega na tym, który.
alexis
5
Przepraszamy, ta odpowiedź jest zagmatwana, zła i niekompletna. : -o Zobacz komentarz @ alexis dotyczący zagmatwanego fragmentu (chociaż jest to również tylko połowa prawdy na temat PO). 2. Zobacz odpowiedź Yehosefa na temat tego, co array_mergefaktycznie robi ... 3. I zobacz odpowiedź BoltClock na temat innej istotnej różnicy, o której tutaj nie wspomniano: array_mergeresetuje klawisze numeryczne, w przeciwieństwie do +.
Sz.
w ogóle nie jest konkretny. niepomocne. nie podkreśla różnicy. zbyt wysoki poziom wyjaśnienia.
Zwróć uwagę, że zduplikowane klucze nienumeryczne przyjmą pierwszą wartość za pomocą operatora unii, ale późniejszą za pomocą array_merge.
W przypadku kluczy numerycznych pierwsza wartość zostanie użyta z operatorem unii, podczas gdy wszystkie wartości zostaną użyte z operatorem array_merge, po prostu ponownie zindeksowanej.
Generalnie używam operatora unii dla tablic asocjacyjnych i array_merge dla liczb. Oczywiście możesz równie dobrze użyć array_merge do asocjacji, tylko że późniejsze wartości nadpiszą wcześniejsze.
array_merge()powoduje, że wszystkie klucze numeryczne znalezione w tablicach wejściowych są ponownie indeksowane w wynikowej tablicy. Operator unii +nie powoduje ponownego zindeksowania.
Interesujące jest to, że array_mergeczynnie kasuje indeks „3” liczby trzy, mimo że jest to ciąg znaków, ponieważ jest to liczba.
Dlatego uważaj podczas łączenia z array_mergetablicami z indeksami numerycznymi. Mogą zgubić klucze. jeśli są dla Ciebie ważne, poprzedz je ciągiem znaków.
więc zamiast '3' => 'three'używać czegoś takiego jak'_3' => 'three'
Jeszcze inny przykład (tablice bez wyraźnych kluczy; to oczywiste, jeśli chodzi o sposób działania operatora +i array_mergedziałania, ale "oczywiste" rzeczy są prostsze, gdy się je widzi;))
Odpowiedzi:
Różnica jest taka:
+
Operator wykonuje związek z dwóch zespołów, przy czymarray_merge
funkcja przyjmuje związek ale zduplikowane klucze są zastępowane.źródło
array_merge
faktycznie robi ... 3. I zobacz odpowiedź BoltClock na temat innej istotnej różnicy, o której tutaj nie wspomniano:array_merge
resetuje klawisze numeryczne, w przeciwieństwie do+
.Oto prosty przykładowy test:
z rezultatem:
Zwróć uwagę, że zduplikowane klucze nienumeryczne przyjmą pierwszą wartość za pomocą operatora unii, ale późniejszą za pomocą array_merge.
W przypadku kluczy numerycznych pierwsza wartość zostanie użyta z operatorem unii, podczas gdy wszystkie wartości zostaną użyte z operatorem array_merge, po prostu ponownie zindeksowanej.
Generalnie używam operatora unii dla tablic asocjacyjnych i array_merge dla liczb. Oczywiście możesz równie dobrze użyć array_merge do asocjacji, tylko że późniejsze wartości nadpiszą wcześniejsze.
źródło
array_merge()
powoduje, że wszystkie klucze numeryczne znalezione w tablicach wejściowych są ponownie indeksowane w wynikowej tablicy. Operator unii+
nie powoduje ponownego zindeksowania.źródło
Źródło: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Przestań używać array_merge ($ defaults, $ options):
Uwaga : funkcja array_replace istnieje od PHP5.3.
źródło
Znak + przyjmuje tylko wartość z pierwszego wystąpienia klucza tablicy.
array_merge pobiera wartość z ostatniego wystąpienia klucza tablicy.
Przykład:
To daje:
Interesujące jest to, że
array_merge
czynnie kasuje indeks „3” liczby trzy, mimo że jest to ciąg znaków, ponieważ jest to liczba.Dlatego uważaj podczas łączenia z
array_merge
tablicami z indeksami numerycznymi. Mogą zgubić klucze. jeśli są dla Ciebie ważne, poprzedz je ciągiem znaków.więc zamiast
'3' => 'three'
używać czegoś takiego jak'_3' => 'three'
źródło
Uważam, że
array_merge
nadpisuje zduplikowane klucze nienumeryczne, a$array1 + $array2
nie.źródło
Jeszcze inny przykład (tablice bez wyraźnych kluczy; to oczywiste, jeśli chodzi o sposób działania operatora
+
iarray_merge
działania, ale "oczywiste" rzeczy są prostsze, gdy się je widzi;))da:
źródło
Zwróć uwagę na inną różnicę: unia (+) nie nadpisze niepustej wartości pustą wartością (biorąc pod uwagę ten sam klucz), podczas gdy array_merge:
Wyjścia:
źródło
Najwyraźniej jeśli zmienisz kolejność, zarówno połączenie, jak i scalenie zrobią to samo
Wyjścia:
Pamiętaj o kolejności tablic.
źródło
$a+$b
vs$b+$a
. Nic nie jest przesłonięte.