PHP将一个数组添加到另一个数组中(不使用array_push或+)

376

如何将一个数组追加到另一个数组而不比较它们的键?

$a = array( 'a', 'b' );
$b = array( 'c', 'd' );

最终结果应该为:Array( [0]=>a [1]=>b [2]=>c [3]=>d ) 如果我使用类似于[]array_push这样的东西,它会导致以下其中一种结果:

Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) )
//or
Array( [0]=>c [1]=>d )

它只是应该做这样的事情,但以一种更优雅的方式:

foreach ( $b AS $var )
    $a[] = $var;

26
array_merge($a, $b) 至少在 PHP 5+ 中应该正好能够满足您的需求。 - tloach
1
在PHP中用于数组的加法运算符 - Gordon
6
你发布的所有输出结果都不是由array_merge();产生的,而array_merge();的输出结果应该正好符合你的需求:print_r(array_merge($a,$b)); // 输出结果 => Array ( [0] => a [1] => b [2] => c [3] => d )。请注意不要改变原意,并使翻译内容更加通俗易懂。 - acm
4
我完全不同意“append”这个术语。实际上,“append”的意思是将一个数组的项作为元素添加到另一个(目标)数组中,而目标数组可能已经有一些元素,因此会改变目标数组。而“merge”则会分配一个新的数组,将两个数组的元素复制过去。相比之下,“append”实际上是在不需要额外的内存分配的情况下重用目标数组中的元素。 - tishma
所有方法都在页面[PHP-docs]的“用户贡献注释”[1]中描述:https://www.php.net/manual/ru/function.array-push.php - Михаил
11个回答

-1

使用foreach循环将值附加到现有数组比使用array_merge更快,因此如果您想将一个数组添加到另一个数组的末尾,请选择循环。

// Create an array of arrays
$chars = [];
for ($i = 0; $i < 15000; $i++) {
    $chars[] = array_fill(0, 10, 'a');
}

// test array_merge
$new = [];
$start = microtime(TRUE);
foreach ($chars as $splitArray) {
    $new = array_merge($new, $splitArray);
}
echo microtime(true) - $start; // => 14.61776 sec

// test foreach
$new = [];
$start = microtime(TRUE);
foreach ($chars as $splitArray) {
    foreach ($splitArray as $value) {
        $new[] = $value;
    }
}
echo microtime(true) - $start; // => 0.00900101 sec
// ==> 1600 times faster

这个回答没有为页面带来任何新信息。性能比较在几年前就已经发布了。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接