Nach den Antworten von bstoney und Snark habe ich einige Tests mit den verschiedenen Methoden durchgeführt:
// Test 1 (array_merge)
$array1 = $array2 = array_fill(0, 50000, 'aa');
$start = microtime(true);
$array1 = array_merge($array1, $array2);
echo sprintf("Test 1: %.06f\n", microtime(true) - $start);
// Test2 (foreach)
$array1 = $array2 = array_fill(0, 50000, 'aa');
$start = microtime(true);
foreach ($array2 as $v) {
$array1[] = $v;
}
echo sprintf("Test 2: %.06f\n", microtime(true) - $start);
// Test 3 (... token)
// PHP 5.6+ and produces error if $array2 is empty
$array1 = $array2 = array_fill(0, 50000, 'aa');
$start = microtime(true);
array_push($array1, ...$array2);
echo sprintf("Test 3: %.06f\n", microtime(true) - $start);
Welches produziert:
Test 1: 0.002717
Test 2: 0.006922
Test 3: 0.004744
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!
array_merge ($a, $b)
sollte genau das tun, was Sie wollen, zumindest mit PHP 5+.