wahrscheinlich hat Gordon das verpasst, weil der Titel nicht array_merge enthält.
Der Pixel-Entwickler
Antworten:
72
Der Unterschied ist:
Der +Operator übernimmt die Vereinigung der beiden Arrays, während die array_mergeFunktion die Vereinigung übernimmt, ABER die doppelten Schlüssel werden überschrieben.
Also, was ist der Unterschied zwischen diesen 2: array_merge , Pluszeichen (obwohl ich die Arrays wechseln um musste)?
Joseph Silber
15
Ein Wort der Vorsicht für Anfänger hier, das Ergebnis der Operation ist in beiden Fällen null, wenn eines der Arrays null ist . Einige interessieren sich möglicherweise nicht für diese Annahme, da es sich um eine Vereinigungsoperation handelt. Das Ergebnis ist das richtige (nicht null) Array, wenn eines von ihnen null ist . Dies gilt jedoch, wenn eines der Arrays ein leeres Array ist. Daher sollten wir als bewährte Methode die Eingabearrays als leere Arrays initialisieren. Was sagt ihr?
Sandeepan Nath
6
Wenn es doppelte Schlüssel sind „ die Vereinigung unter“ wird immer haben , um einen von ihnen loszuwerden. Der Unterschied ist in welchem.
Alexis
5
Entschuldigung, diese Antwort ist verwirrend, falsch und unvollständig. : -o Siehe @ alexis 'Kommentar zum verwirrenden Bit (obwohl dies auch nur die halbe Wahrheit bezüglich des OP ist). 2. Siehe Yehosefs Antwort auf das, was array_mergetatsächlich tut ... 3. Und siehe BoltClocks Antwort auf einen weiteren entscheidenden Unterschied, der hier nicht erwähnt wird: Im array_mergeGegensatz zum Zurücksetzen von Zifferntasten +.
Gr.
überhaupt nicht spezifisch. nicht hilfreich. hebt den Unterschied nicht hervor. zu hohe Erklärung.
Beachten Sie, dass doppelte nicht numerische Schlüssel den ersten Wert mit dem Union-Operator, den späteren mit array_merge annehmen.
Bei numerischen Schlüsseln wird der erste Wert mit dem Vereinigungsoperator verwendet, während alle Werte mit dem gerade neu indizierten array_merge verwendet werden.
Ich verwende im Allgemeinen den Union-Operator für assoziative Arrays und array_merge für numerische. Natürlich können Sie auch array_merge für assoziative verwenden, nur dass die späteren Werte frühere überschreiben.
array_merge()bewirkt, dass alle in den Eingabearrays gefundenen numerischen Schlüssel im resultierenden Array neu indiziert werden. Der Gewerkschaftsoperator +verursacht keine Neuindizierung.
Warum sollten wir array_merge nicht mehr verwenden ($ default, $ options):? weil es nicht indizierte Schlüssel nicht erlaubt?
Ahnbizcad
aber die Antwort ist wirklich didaktisch +1
snr
20
Das + -Zeichen übernimmt nur den Wert von ersten Auftreten eines Array-Schlüssels an.
array_merge übernimmt den Wert aus dem letzten Vorkommen eines Array-Schlüssels.
Interessant dabei ist, dass die array_merge actally löscht die sogar ‚3‘ Index der Nummer drei , obwohl es ein String ist, weil es sich um eine Zahl ist.
Seien Sie also vorsichtig, wenn Sie mit verschmelzen array_merge Arrays mit numerischen Indizes zusammenführen. Sie könnten ihre Schlüssel verlieren. Wenn sie für Sie wichtig sind, stellen Sie ihnen eine Zeichenfolge voran.
also anstatt so '3' => 'three'etwas zu benutzen'_3' => 'three'
Noch ein weiteres Beispiel (Arrays ohne explizite Schlüssel; es ist offensichtlich, wie der Bediener +und die array_mergeArbeitsweise funktionieren, aber "offensichtliche" Dinge sind einfacher, wenn man sie sieht;))
Bitte beachten Sie einen weiteren Unterschied: Die Vereinigung (+) überschreibt nicht leere Werte nicht mit leeren Werten (unter Berücksichtigung des gleichen Schlüssels), während array_merge:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Antworten:
Der Unterschied ist:
Der
+
Operator übernimmt die Vereinigung der beiden Arrays, während diearray_merge
Funktion die Vereinigung übernimmt, ABER die doppelten Schlüssel werden überschrieben.quelle
array_merge
tatsächlich tut ... 3. Und siehe BoltClocks Antwort auf einen weiteren entscheidenden Unterschied, der hier nicht erwähnt wird: Imarray_merge
Gegensatz zum Zurücksetzen von Zifferntasten+
.Hier ist ein einfacher illustrativer Test:
mit dem Ergebnis:
Beachten Sie, dass doppelte nicht numerische Schlüssel den ersten Wert mit dem Union-Operator, den späteren mit array_merge annehmen.
Bei numerischen Schlüsseln wird der erste Wert mit dem Vereinigungsoperator verwendet, während alle Werte mit dem gerade neu indizierten array_merge verwendet werden.
Ich verwende im Allgemeinen den Union-Operator für assoziative Arrays und array_merge für numerische. Natürlich können Sie auch array_merge für assoziative verwenden, nur dass die späteren Werte frühere überschreiben.
quelle
array_merge()
bewirkt, dass alle in den Eingabearrays gefundenen numerischen Schlüssel im resultierenden Array neu indiziert werden. Der Gewerkschaftsoperator+
verursacht keine Neuindizierung.quelle
Quelle: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Verwenden Sie array_merge nicht mehr ($ defaults, $ options):
Hinweis : Die Funktion array_replace ist seit PHP5.3 vorhanden.
quelle
Das + -Zeichen übernimmt nur den Wert von ersten Auftreten eines Array-Schlüssels an.
array_merge übernimmt den Wert aus dem letzten Vorkommen eines Array-Schlüssels.
Beispiel:
Dies gibt aus:
Interessant dabei ist, dass die
array_merge
actally löscht die sogar ‚3‘ Index der Nummer drei , obwohl es ein String ist, weil es sich um eine Zahl ist.Seien Sie also vorsichtig, wenn Sie mit verschmelzen
array_merge
Arrays mit numerischen Indizes zusammenführen. Sie könnten ihre Schlüssel verlieren. Wenn sie für Sie wichtig sind, stellen Sie ihnen eine Zeichenfolge voran.also anstatt so
'3' => 'three'
etwas zu benutzen'_3' => 'three'
quelle
Ich glaube,
array_merge
überschreibt doppelte nicht numerische Schlüssel, während$array1 + $array2
dies nicht der Fall ist.quelle
Noch ein weiteres Beispiel (Arrays ohne explizite Schlüssel; es ist offensichtlich, wie der Bediener
+
und diearray_merge
Arbeitsweise funktionieren, aber "offensichtliche" Dinge sind einfacher, wenn man sie sieht;))wird geben:
quelle
Bitte beachten Sie einen weiteren Unterschied: Die Vereinigung (+) überschreibt nicht leere Werte nicht mit leeren Werten (unter Berücksichtigung des gleichen Schlüssels), während array_merge:
Ausgänge:
quelle
Wenn Sie also die Reihenfolge ändern, tun Union und Merge anscheinend dasselbe
Ausgänge:
Beachten Sie die Reihenfolge der Arrays.
quelle
$a+$b
vs$b+$a
. Nichts wird überschrieben.