array_merge()对数字索引重索引、字符串键后覆盖,+运算符保留左侧数字键、字符串键前优先;前者支持多参数,后者仅限两操作数且静默处理null。

PHP 中 array_merge() 和 + 运算符都能合并数组,但数字索引(即纯整数键)的处理逻辑截然不同——这是最容易出错的地方。
数字索引:重索引 vs 保留原键
array_merge() 遇到数字索引数组时,会丢弃所有原始数字键,统一从 0 开始连续重索引;而 + 运算符则完全保留左侧数组的数字键,右侧同键值被忽略,不追加也不覆盖。
-
array_merge([10, 20], [30, 40])→[0=>10, 1=>20, 2=>30, 3=>40] -
[10, 20] + [30, 40]→[0=>10, 1=>20](右侧键 0 和 1 已存在,直接跳过) - 若右侧键不重叠:
[10, 20] + [3=>'x', 4=>'y']→[0=>10, 1=>20, 3=>'x', 4=>'y'](只补缺,不重排)
字符串键:覆盖方向相反
对关联键(如 'name'、'id'),两者行为目标一致但逻辑相反:
-
array_merge()是“后覆盖前”:['a'=>1] + ['a'=>2]结果是['a'=>2] -
+是“前保留后忽略”:['a'=>1] + ['a'=>2]结果仍是['a'=>1]
参数数量与类型容错性
实际使用中还需注意边界情况:
-
array_merge()支持任意多个数组参数,也支持空数组或无参数调用(PHP 7.4+ 返回空数组) -
+只能用于两个操作数,不能链式写成$a + $b + $c(会报错) - 传入
null或非数组时:array_merge()触发警告;+会把null当作[]处理,静默兼容
典型适用场景
选哪个,关键看你要什么结果:
- 需要拼接列表、生成新序列(如分页数据合并)→ 用
array_merge() - 配置项合并、默认值兜底(右侧是用户输入,要优先保留左侧默认)→ 用
+ - 混合键数组(既有数字索引又有字符串键)→
+更可控,array_merge()可能意外重排数字部分
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











