PHP中加号(+)不能可靠合并三个以上数组,因它仅支持两两键名合并且重复键不覆盖;应使用array_merge(),它支持多数组、字符串键覆盖、数字键重索引。

PHP 中的加号(+)运算符不能用于合并三个以上数组,它只支持两个操作数。试图写 $a + $b + $c 实际上是先计算 $a + $b,再将结果与 $c 相加——这看似可行,但存在严重隐患:加号对数组是“键名合并”,**重复键名会被忽略(右侧不覆盖左侧)**,且仅适用于索引数组或关联数组的简单合并场景,不推荐用于多数组合并。
加号运算符的本质限制
加号(+)不是“合并函数”,而是“联合运算符”:
- 只接受两个操作数,语法上不支持三元或更多直接相加(虽然可链式书写,但逻辑仍是两两进行)
- 对相同字符串键名,左边数组的值保留,右边被丢弃(不覆盖、不递归、不报错)
- 对数字键名,不重索引,右边的同键名元素会被完全跳过(例如
[0 => 'a'] + [0 => 'b']结果仍是[0 => 'a']) - 无法处理嵌套数组合并,也不触发类型转换或错误提示
推荐替代方案:array_merge()
array_merge() 是合并多个数组的标准方法,支持任意数量参数,行为明确可靠:
- 字符串键名:右侧数组值覆盖左侧同名键
- 数字键名:自动重新索引(从 0 开始连续编号)
- 支持三个及以上数组:如
array_merge($a, $b, $c, $d) - 若需保留原始数字键不重排,可用
array_merge_recursive()或手动处理
其他实用方式
当需要更灵活控制时,可考虑:
-
展开运算符(PHP 7.4+):用
[...$a, ...$b, ...$c]合并索引数组(仅限一维,键名会重排为 0,1,2…) -
循环调用 array_merge():适合动态数组列表,例如
array_reduce($arrays, 'array_merge', []) -
自定义合并逻辑:如需深度合并或条件覆盖,应使用
array_merge_recursive()或写递归函数
总之,别依赖 + 合并多个数组。用 array_merge() 最安全、最直观、最符合预期。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











