You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中array_merge与foreach循环合并数组的性能效率对比

数组合并方案性能差异解答

两种实现的底层逻辑差异

  • array_merge:PHP内置C实现的函数,运行时会先统计所有输入数组的总元素数,预先分配对应大小的内存,再逐一拷贝元素。额外开销来自强制的数字索引重排规则,官方定义array_merge遇到数字键的数组时,会统一将结果的索引从0开始重新编排,哪怕原数组是连续数字索引也会执行该流程。
  • foreach追加:PHP用户态实现的写入逻辑,通过$arr[] = $item语法直接向数组末尾追加元素,不需要处理索引重排,仅当数组当前预分配的内存槽位耗尽时才会触发一次扩容。

不同场景下的性能表现

小数据量(总元素≤1000场景)

array_merge效率更高:

  • 内置C函数的调用开销远低于PHP用户态foreach循环的解析执行开销
  • 小数据量下索引重排的成本可以忽略,预先分配内存的优势凸显,不会触发多次扩容
    你测试得到的foreach耗时为n²级属于正常表现,小数据量下用户态循环的开销会被明显放大,和内置函数的性能差距十分显著。

大数据量(总元素≥10000场景)

foreach追加效率更高:

  • array_merge的索引重排开销随元素数量线性增长,当元素量过万后,这部分开销会超过C实现本身的性能优势
  • foreach追加不需要处理索引重排,仅按顺序写入元素即可,动态扩容的分摊成本远低于索引重排的成本,和你测试得到的foreach耗时远低于array_merge的结果一致。

适配你的业务场景的最优方案

你的业务要求第一个数组内容排在最前、无需去重排序、元素仅为数字,可按数组总规模选择方案:

  1. 确认数组总元素长期稳定在1000以内:直接使用array_merge($first_array, $second_array, $third_array)即可,代码更简洁易维护。
  2. 数组总元素经常过万或者大小波动极大:选择foreach追加的方式,完整实现代码如下(避免修改原第一个数组):
// 先拷贝第一个数组作为结果基底,不修改原数组
$result = $first_array;
// 追加第二个数组
foreach ($second_array as $item) {
    $result[] = $item;
}
// 追加第三个数组
foreach ($third_array as $item) {
    $result[] = $item;
}

内容的提问来源于stack exchange,提问作者Md Rashedul Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:36:06