+运算符比array_merge()快得多,但行为不同:+保留左侧键不覆盖,array_merge()对字符串键后值覆盖、数字键重索引;选+适用于配置合并等需保留左侧结构的场景,选array_merge()适用于索引数组拼接或需后值覆盖的场景。

+ 运算符明显更快。
性能实测差距显著
在循环 10 万次的基准测试中:
- array_merge() 耗时约 6 秒
- + 运算符耗时接近 0 秒(实际通常在毫秒级)
这是因为 + 是语言级操作符,直接在内核层面完成键检查与合并;而 array_merge() 是函数调用,需压栈、参数校验、类型判断、内存分配等额外开销。
但速度不是唯一标准
快不等于适合。两者行为差异根本:
- + 保留左侧所有键,右侧同键完全忽略(不覆盖、不重索引)
- array_merge() 对字符串键后值覆盖,对数字键强制重索引(0,1,2…)
例如:$a = [0=>'x', 'k'=>'v']; $b = [0=>'y', 'k'=>'w'];
-
$a + $b→[0=>'x', 'k'=>'v'] -
array_merge($a, $b)→[0=>'x', 1=>'y', 'k'=>'w']
何时该选哪个
优先用 + 的场景:
- 配置合并(默认配置 + 用户配置)
- 需要严格保留左侧索引位置(如表单字段顺序)
- 右侧可能为 null 或非数组(+ 会静默转为空数组,array_merge 报警告)
必须用 array_merge() 的场景:
- 拼接索引数组并希望连续编号(如分页数据合并)
- 明确需要后配置覆盖前配置(如环境变量叠加)
- 传入多个数组(+ 只支持两个,array_merge 支持任意个)
小结
单纯比快,+ 碾压 array_merge();但选哪个,取决于你要的是“左侧优先保留”还是“后值覆盖+重排”。别为了省几毫秒,把数据结构搞错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











