PHP 数组合并一般有两种方式,直接用 +
或者使用 array_merge
都可以,在什么时候该使用哪个?以及要注意什么?
这都是一些非常基础的知识,但是知道这些知识非常有用,因为平常我们代码出现 bug,往往都是一些基础知识不牢固导致的。
PS:PHP 环境要求 5.4 以上
+
特点:键值相同,前面数组覆盖后面数组,后面数组无效
实例一:
<?php
print_r(['a'=>1, 'b' => 2] + ['a' => 3, 'd' => 4]);
// 输出 Array ( [a] => 1 [b] => 2 [d] => 4 )
后面数组 key 为 a 的值没起效果
实例二:
print_r(['a'] + ['b', 'c', 'd']);
// 输出 Array ( [0] => a [1] => c [2] => d )
注意输出结果 后面数组的第一个 value 值 b 不见了,这个地方最容易被忽视了。
结论:使用 +
方式合并数组,数组 key 会被保留;key 相同,前面数据会覆盖后面数据。
array_merge
特点:键值相同,后面数组覆盖前面数组,前面数组无效
实例一:
<?php
print_r(array_merge(['a'=>1, 'b' => 2] , ['a' => 3, 'd' => 4]));
// 输出 Array ( [a] => 3 [b] => 2 [d] => 4 )
前面数组 key 为 a 的值没起效果
实例二:
print_r(array_merge(['a'], ['b', 'c', 'd']));
// 输出 Array ( [0] => a [1] => b [2] => c [3] => d )
print_r(array_merge([1=>'a', 2 => 'b'] , [0 => 'c', 1 => 'd']));
// 输出 Array ( [0] => a [1] => b [2] => c [3] => d )
数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
结论:使用 array_merge
方式合并数组,如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
如果你要合并数组 key 是字符串,两种方式可以随便用,只要注意是 key 相同时是前面被覆盖还是后面被覆盖就可以了。
但是一旦你要合并的数组 key 是数字,你就要结合你的场景思考了,然后谨慎选择其中一个合并。(这个时候大多数是使用 array_merge
)