Wie kann man ein Array an ein anderes anhängen, ohne die Schlüssel zu vergleichen?
$a = array( 'a', 'b' );
$b = array( 'c', 'd' );
Am Ende sollte es sein: Array( [0]=>a [1]=>b [2]=>c [3]=>d )
Wenn ich so etwas wie []
oder verwende array_push
, führt dies zu einem der folgenden Ergebnisse:
Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) )
//or
Array( [0]=>c [1]=>d )
Es sollte einfach etwas sein, dies zu tun, aber auf elegantere Weise:
foreach ( $b AS $var )
$a[] = $var;
array_merge ($a, $b)
sollte genau das tun, was Sie wollen, zumindest mit PHP 5+.array_merge();
der Ausgabe vonarray_merge();
sollte genau das sein, was Sie benötigen:print_r(array_merge($a,$b)); // outputs => Array ( [0] => a [1] => b [2] => c [3] => d )
Antworten:
array_merge
ist der elegante Weg:So etwas tun wie:
Funktioniert nicht, da der
+
Bediener sie nicht zusammenführt. Wenn sie$a
die gleichen Schlüssel wie haben$b
, wird es nichts tun.quelle
Eine andere Möglichkeit, dies in PHP 5.6+ zu tun, wäre die Verwendung des
...
TokensDies funktioniert auch mit jedem
Traversable
Eine Warnung :
$b
ein leeres Array vorhanden oder nicht durchlaufbar ist, z. B. kein Array$b
nicht durchlaufbar istquelle
...
allgemein als diesplat operator
in PHP bezeichnet.array_push
akzeptiert ein einzelnes Argument seit PHP 7.3, das Fehler mit leeren Arrays verhindert.Warum nicht verwenden
Warum möchten Sie nicht diese korrekte, integrierte Methode verwenden?
quelle
PHP append one array to another (not array_merge or array_push)
... wurde anschließend geändert,PHP append one array to another (not array_merge or +)
bevor der aktuelle Titel geändert wurdeEs ist ein ziemlich alter Beitrag, aber ich möchte etwas zum Anhängen eines Arrays an ein anderes hinzufügen:
Wenn
Sie können Array-Funktionen wie folgt verwenden:
array_merge führt keine numerischen Schlüssel zusammen, sodass alle Werte von $ appendArray angehängt werden. Bei Verwendung von nativen PHP-Funktionen anstelle einer foreach-Schleife sollte diese auf Arrays mit vielen Elementen schneller sein.
Ergänzung 2019-12-13: Seit PHP 7.4 besteht die Möglichkeit, Arrays auf die Weise des Array Spread Operator anzuhängen oder voranzustellen:
Nach wie vor können Schlüssel ein Problem mit dieser neuen Funktion sein:
"Schwerwiegender Fehler: Nicht erfasster Fehler: Array kann nicht mit Zeichenfolgenschlüsseln entpackt werden"
Array (4) {[1] => int (1) [4] => int (2) [5] => int (3) [6] => int (4)}
Array (3) {[0] => int (1) [1] => int (4) [3] => int (3)}
quelle
Ausgabe:
Referenzquellcode
quelle
Bei großen Arrays ist es besser, ohne array_merge zu verketten, um eine Speicherkopie zu vermeiden.
quelle
Nach den Antworten von bstoney und Snark habe ich einige Tests mit den verschiedenen Methoden durchgeführt:
Welches produziert:
ORIGINAL: Ich glaube, ab PHP 7 ist Methode 3 eine wesentlich bessere Alternative, da foreach-Schleifen jetzt so funktionieren , dass eine Kopie des Arrays erstellt wird, über das iteriert wird.
Während Methode 3 nicht unbedingt eine Antwort auf die Kriterien von 'not array_push' in der Frage ist, ist sie eine Zeile und in jeder Hinsicht die leistungsstärkste, aber ich denke, die Frage wurde gestellt, bevor die ... Syntax eine Option war.
UPDATE 25/03/2020: Ich habe den Test aktualisiert, der fehlerhaft war, da die Variablen nicht zurückgesetzt wurden. Interessanterweise (oder verwirrend) zeigen die Ergebnisse nun, dass Test 1 der schnellste ist, wo er am langsamsten war, nachdem er von 0,008392 auf 0,002717 gestiegen ist! Dies kann nur auf PHP-Updates zurückzuführen sein, da dies nicht durch den Testfehler beeinflusst worden wäre.
Also, die Saga geht weiter, ich werde von nun an array_merge verwenden!
quelle
Seit PHP 7.4 können Sie den Operator ... verwenden . Dies wird in anderen Sprachen, einschließlich Ruby, auch als Splat-Operator bezeichnet .
Ausgabe
Der Splat-Operator sollte eine bessere Leistung als array_merge haben . Dies liegt nicht nur daran, dass der Splat-Operator eine Sprachstruktur ist, während array_merge eine Funktion ist, sondern auch daran, dass die Optimierung der Kompilierungszeit für konstante Arrays performant sein kann.
Darüber hinaus können wir die Syntax des Splat-Operators überall im Array verwenden, da normale Elemente vor oder nach dem Splat-Operator hinzugefügt werden können.
quelle
Vor PHP7 können Sie Folgendes verwenden:
array_splice()
arbeitet mit Bezug auf Array (1. Argument) und setzt Array-Werte (4. Argument) anstelle der Liste der Werte, die mit dem 2. Argument und der Nummer des 3. Arguments beginnen. Wenn wir das 2. Argument als Ende des Quellarrays und das 3. als Null setzen, hängen wir die 4. Argumentwerte an das 1. Argument anquelle
Wenn Sie ein leeres Array mit einem vorhandenen neuen Wert zusammenführen möchten. Sie müssen es zuerst initialisieren.
Hoffe seine Hilfe.
quelle
foreach-Schleife ist schneller als array_merge, um Werte an ein vorhandenes Array anzuhängen. Wählen Sie stattdessen die Schleife, wenn Sie ein Array am Ende eines anderen hinzufügen möchten.
quelle
Wie wäre es damit:
quelle
'0' => 'a'
... statt0 => 'a'
?array + array