array_merge()是PHP中合并多个数组的标准方法,按顺序追加并重排数值索引、字符串键后者覆盖前者;需确保参数为数组,否则报Warning;不适用于需保留数字键或深度合并的场景。

PHP array_merge() 是最直接的合并方式
多个数组一次性合并,array_merge() 就是标准解法。它接受任意数量的数组参数,按顺序把后面数组的键值“追加”到前面数组上。数值索引会重排,字符串键名冲突时后者覆盖前者。
常见错误是传入非数组类型(比如 null 或字符串),这时函数会直接报 Warning: array_merge(): Expected parameter X to be an array。务必确保每个参数都是数组——可以用 is_array() 预检,或用 (array) 强转兜底:
$a = ['a' => 1]; $b = null; $c = ['b' => 2]; $result = array_merge($a, (array)$b, $c); // 安全,$b 被转为空数组
合并带重复字符串键的数组要注意覆盖逻辑
当多个数组都有相同字符串键(比如都含 'name')时,array_merge() 不合并值,而是简单覆盖:后出现的值完全取代前面的。这和 array_replace() 行为一致,但和 + 数组合并操作符不同(+ 会保留左侧键值,不覆盖)。
使用场景判断很关键:
立即学习“PHP免费学习笔记(深入)”;
- 要“后配置覆盖前配置”,用
array_merge()或array_replace() - 要“左侧优先、只补缺不覆盖”,用
$defaults + $overrides - 要深度合并(比如多维数组中同名子数组也递归合并),得用
array_replace_recursive(),不是array_merge()
性能敏感时别用 array_merge(...$arrays) 展开大数组
PHP 5.6+ 支持展开运算符,写法简洁:array_merge(...$arrays)。但若 $arrays 是几百个元素的数组,展开后传参会触发大量内存拷贝,比循环调用 array_merge() 更慢。
实操建议:
- 数组少于 10 个:用
array_merge($a, $b, $c)或展开语法都行 - 数组数量动态且可能较多(如从数据库查出几十组配置):改用循环累加,更可控
$result = [];
foreach ($arrays as $arr) {
$result = array_merge($result, $arr);
}
注意 array_merge() 对空数组和非数组的静默处理
空数组不会报错,会被正常合并;但遇到 null、false、数字等非数组类型,就会中断并警告。很多人在拼接用户输入或 API 返回数据时踩坑——以为“没数据”就等于“空数组”,结果传了 null 进去。
最容易被忽略的是关联数组与索引数组混用时的索引重排问题:数值键永远被重置为 0,1,2…,哪怕你只是合并一个空数组也会触发重排。如果业务依赖原始数字键顺序(比如表格行号映射),就不能直接用 array_merge(),得手写合并逻辑或改用 array_values() 后再处理。



















