Исходя из ответов bstoney и Snark, я провел несколько тестов по различным методам:
// 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);
Который производит:
Test 1: 0.002717
Test 2: 0.006922
Test 3: 0.004744
ОРИГИНАЛ: Я полагаю, что в PHP 7 метод 3 является значительно лучшей альтернативой из-за того, как теперь работают циклы foreach , то есть для создания копии итеративного массива.
Хотя метод 3 не является строго ответом на критерии «не array_push» в вопросе, это одна строка и самая высокая производительность во всех отношениях, я думаю, что вопрос задавался до того, как синтаксис ... был опцией.
ОБНОВЛЕНИЕ 25/03/2020: я обновил тест, который был ошибочным, поскольку переменные не были сброшены. Интересно (или запутанно), что результаты теперь показывают, что тест 1 был самым быстрым, где он был самым медленным, пройдя от 0,008392 до 0,002717! Это может быть связано только с обновлениями PHP, поскольку на это не повлиял бы недостаток тестирования.
Итак, сага продолжается, теперь я начну использовать array_merge!
array_merge ($a, $b)
должен делать именно то, что вы хотите, по крайней мере, с PHP 5+.