mögliches Duplikat von Reference – Was bedeutet dieses Symbol in PHP?
– Stalker
26. Juni 2014 um 3:40 Uhr
@RobbieAverill – das ist die Frage, auf die sich diese Referenzfrage bezieht. Also, wenn überhaupt, ist diese Referenzfrage das Duplikat
– icc97
21. November 2016 um 12:29 Uhr
Ist noch jemand etwas entsetzt darüber, dass eine so grundlegende Sache wie die Array-Verkettung durchgeführt werden muss? array_merge? Es ist, als ob Arrays standardmäßig assoziative Arrays und numerische Arrays Bürger zweiter Klasse wären.
Der +-Operator gibt das rechte Array zurück, das an das linke Array angehängt ist; für Schlüssel, die in beiden Arrays vorhanden sind, werden die Elemente aus dem linken Array verwendet und die übereinstimmenden Elemente aus dem rechten Array werden ignoriert.
Array
(
[0] => one // preserved from $array1 (left-hand array)
[1] => two // preserved from $array1 (left-hand array)
[foo] => bar // preserved from $array1 (left-hand array)
[2] => five // added from $array2 (right-hand array)
)
Also die Logik von + entspricht dem folgenden Snippet:
Beachten Sie, dass + ist anders als wie array_merge() würde die Arrays kombinieren:
print_r(array_merge($array1, $array2));
würde dir geben
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => baz // overwritten from $array2
[2] => three // appended from $array2
[3] => four // appended from $array2
[4] => five // appended from $array2
)
Weitere Beispiele finden Sie auf den verlinkten Seiten.
@Pacerier PHP, das von php.net produziert wird, hat keine formale Spezifikation, aber sowohl die + Und array_merge Forderung zend_hash_merge unter der Haube. Dies ist auch zu erwarten, da in PHP Arrays als geordnete Hash-Maps implementiert sind.
– Bischof
19. Mai 2015 um 18:34 Uhr
@Pacerier Die php.net-Online-Dokumentation kommt einer Spezifikation am nächsten, aber meiner Meinung nach bleiben diese Dokumente weit hinter einer echten Spezifikation zurück: Erstens werden sie aktualisiert, nachdem der Code geschrieben wurde; Zweitens sind sie nicht so geschrieben, dass sie jede spezielle Verwendung abdecken.
– Bischof
25. Mai 2015 um 0:44 Uhr
Das Verhalten von PHP’s + Und array_merge ist pervers und unintuitiv. Sie sind genau umgekehrt zu dem, was eine einfache englische Lesart Ihnen intuitiv sagen würde, wenn Sie Arrays „hinzufügen“ oder „zusammenführen“ würden. Verwendung anderer Sprachen/Bibliotheken + um Listen zu verketten (zB in Python) und Funktionen zu “verschmelzen”, um die Schlüssel/Wert-Paare von einem Objekt zu einem anderen hinzuzufügen (zB in Lodash). Doch in PHP ist es umgekehrt; array_merge kann aber zum Verketten von listenartigen Arrays verwendet werden + kann nicht. nicht wie array_merge, + führt immer die Operation aus, die in jeder anderen Sprache als “Zusammenführen” bezeichnet würde.
Der $default_vars, wie es nahelegt, ist das Array für Standardwerte. Der $user_vars array überschreibt die in definierten Werte $default_vars. Alle fehlenden Werte in $user_vars sind nun die default vars aus $default_vars.
Dieser Operator nimmt die Vereinigung zweier Arrays (dasselbe wie array_merge, außer dass mit array_merge doppelte Schlüssel überschrieben werden).
Die Dokumentation für Array-Operatoren wird gefunden Hier.
Ein Wort der Vorsicht für Anfänger hier, das Ergebnis der Operation ist Null wenn eines der Arrays ist Null. Einige interessieren sich möglicherweise nicht dafür, vorausgesetzt, da es sich um eine Union-Operation handelt, ist das Ergebnis das richtige (Nicht-Null-) Array, wenn eines von ihnen null ist. Aber das gilt, wenn eines der Arrays ein ist leer Reihe.
– Sandeepan Nath
13. Juli 2012 um 6:52 Uhr
Ich denke also, dass wir als gute Praxis die Eingabearrays als leere Arrays initialisieren sollten. Was sagt ihr?
– Sandeepan Nath
13. Juli 2012 um 6:58 Uhr
Seien Sie vorsichtig mit Zifferntasten, wenn diese erhalten bleiben sollen oder Sie nichts verlieren wollen
Der + Operator erzeugt die gleichen Ergebnisse wie array_replace(). Da jedoch die Operatorargumente umgekehrt sind, kann auch die Reihenfolge des resultierenden Arrays anders sein.
Erweitern Sie ein weiteres Beispiel von dieser Seite:
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => bar // preserved from $array1
[2] => five // added from $array2
)
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[2] => five // added from $array2
[foo] => bar // preserved from $array1
)
Ist die Reihenfolge von + Garantiert durch die Spezifikationen? Wie wäre es mit array_replace?
– Schrittmacher
30. März 2015 um 12:46 Uhr
Die Array-Plus-Operation behandelt alle Arrays als assoziierte Arrays.
Bei einem Tastenkonflikt während Plus wird der linke (vorherige) Wert beibehalten
Ich poste den Code unten, um die Dinge klarer zu machen.
$a + $b = array_plus($a, $b)
function array_plus($a, $b){
$results = array();
foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
return $results;
}
Ist die Reihenfolge von + Garantiert durch die Spezifikationen? Wie wäre es mit array_replace?
Davon abgesehen könnten wir uns den Operator + als etwas redundant vorstellen, da dasselbe mit der Funktion array_replace erreicht werden kann.
Es gibt jedoch Fälle, in denen es praktisch ist: Angenommen, Sie haben ein $options-Array, das an eine Funktion/Methode übergeben wird, und es gibt auch Standardwerte, die als Fallback verwendet werden können:
// we could do it like this
function foo(array $options)
{
$defaults = ['foo' => 'bar'];
$options = array_replace($defaults, $options);
// ...
}
// but + here might be way better:
function foo(array $options)
{
$options += ['foo' => 'bar'];
// ...
}
14451600cookie-checkZusammenführen zweier Arrays mit dem „+“ (Array-Vereinigungsoperator) Wie funktioniert das?yes
Ich merke, Ihre Frage hatte
+=
und die akzeptierte Antwort hatte+
. Nach meinen Tests scheinen sie sich gleich zu verhalten.– Benutzer151841
24. August 2012 um 17:24 Uhr
Der Dokumentation fasst es ziemlich gut zusammen
– Kunstvoller Roboter
22. August 2013 um 13:53 Uhr
mögliches Duplikat von Reference – Was bedeutet dieses Symbol in PHP?
– Stalker
26. Juni 2014 um 3:40 Uhr
@RobbieAverill – das ist die Frage, auf die sich diese Referenzfrage bezieht. Also, wenn überhaupt, ist diese Referenzfrage das Duplikat
– icc97
21. November 2016 um 12:29 Uhr
Ist noch jemand etwas entsetzt darüber, dass eine so grundlegende Sache wie die Array-Verkettung durchgeführt werden muss?
array_merge
? Es ist, als ob Arrays standardmäßig assoziative Arrays und numerische Arrays Bürger zweiter Klasse wären.– icc97
21. November 2016 um 12:35 Uhr