array_merge()报错因传入null参数,需用$a ?? []等确保参数为数组;array_merge_recursive()同理。

这个报错说明你传给 array_merge() 的某个参数是 null,而它只接受数组类型。PHP 会直接抛出警告:「Warning: array_merge(): Expected parameter X to be an array, null given」。
检查每个传入参数是否为数组
最常见原因是变量未定义、查询失败返回 null、函数没返回值,或条件分支中漏了默认赋值。比如:
$a = getData(); // 可能返回 null$b = $config['items'] ?? null; // 配置项不存在时为 nullarray_merge($a, $b); // 任一为 null 就报错
用 is_array() 或 null 合并前过滤
安全做法是在合并前确保每个参数都是数组。推荐用空数组兜底:
array_merge((array)$a, (array)$b); // 强转,简单但不够精准(null 变成 [])array_merge($a ?? [], $b ?? []); // 推荐:语义清晰,只对 null/undefined 生效array_merge(is_array($a) ? $a : [], is_array($b) ? $b : []); // 最严谨,排除 false/0/'' 等假值干扰
开启错误报告 + 打印调试参数
临时加几行调试代码,快速定位哪个参数是 null:
var_dump($a, $b, $c); // 看输出里哪个是 NULLerror_reporting(E_ALL); ini_set('display_errors', '1'); // 确保警告可见- 如果在框架里(如 Laravel),注意某些方法(如
collect()->toArray())可能返回 null,需先判空
注意 array_merge_recursive 的同样问题
如果你用的是 array_merge_recursive(),它也有完全相同的限制:所有参数必须是数组。不能因为“recursive”就以为它更宽容——null 还是会报错,处理方式和上面一致。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











