PHP 基础之数组合并

PHP · echo · 于 7年前 发布 · 4842 次阅读

引言

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

共收到 5 条回复 技巧库 PHP基础
Simon#17年前 0 个赞

我一直以为只有 Python 可以 [] + [] 进行合并呢 额 开脑洞了

echo#27年前 0 个赞

@Simon #1楼 :joy:

kevin_xi#36年前 0 个赞

受教了

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册