+运算符最快且语义明确:保留左数组全部键值,右数组仅补缺;array_merge()次之但会重索引数字键并覆盖关联键;手动循环最慢且易错。

PHP 8.2 中,对大数组做合并操作时,直接用 + 运算符最快,array_merge() 次之,手动循环最慢——但关键不在“快”,而在“是否符合语义”。
性能上:+ 运算符远胜 array_merge()
实测(10 万次合并)显示:+ 耗时接近 0 秒,array_merge() 约 6 秒。原因在于:
-
+是语言级操作,底层直接复制哈希表指针,跳过键值重排、类型检查、递归遍历等开销 -
array_merge()需要逐个检查键类型(字符串 or 数字),对数字键强制重索引,对关联键做覆盖判断,还要分配新内存并拷贝全部元素 - PHP 8.2 虽有 JIT 和优化,但无法绕过
array_merge()的语义约束带来的固有开销
语义上:两者行为完全不同,不能互换
选哪个不是看速度,而是看你要什么结果:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 用
+:保留左数组的全部键值,右数组只补充「左数组中不存在的键」;数字键也按位置保留,不重排、不追加重复索引 - 用
array_merge():数字键重新从 0 开始连续编号,字符串键后值覆盖前值;适合拼接索引数组或明确需要覆盖逻辑的配置合并 - 手动循环:灵活性最高,但每次都要
foreach+isset()判断,代码冗长、易出错、GC 压力大,性能最差
大数组场景下的实用建议
面对大数组(如万级元素以上),优先考虑这三点:
- 如果目标是「以 A 为基准,仅用 B 补全缺失项」→ 无条件选
$a + $b - 如果目标是「把 A 和 B 当作纯列表拼起来」→ 用
array_merge($a, $b),别用+(否则数字键会丢失) - 避免在循环里反复调用
array_merge()合并多个大数组,改用一次传入全部参数:array_merge(...$arrays) - 若需深度合并(如多维配置),
array_merge_recursive()不提速,反而更慢,应改用自定义递归或array_replace_recursive()
真正影响性能的往往不是函数本身,而是是否在错误语义下强行优化。先想清楚“要什么”,再选工具。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










