array_merge()报错因传入非数组参数,需用(array)强转或is_array判断确保各参数为数组,推荐统一兜底为空数组,或封装safe_merge函数处理非法值。

出现 array_merge(): Argument #1 is not an array 或类似 “null given” 错误,本质是传给了 array_merge() 一个 null(或其它非数组类型)值,而它只接受数组参数。
检查并确保每个参数都是数组
PHP 的 array_merge() 要求所有参数都必须是数组。如果某个变量可能是 null、false、字符串或未定义,直接传入就会报错。
常见出错写法:
$a = get_config('user'); // 可能返回 null
$b = $user_data ?? []; // 安全,但下面这行不安全
$result = array_merge($a, $b); // ❌ $a 是 null 就报错
用空数组兜底(推荐)
最简单可靠的方式:对每个可能为 null 或非数组的变量,用 (array) 强转或三元判断转成数组。
-
(array)$var—— 安全强转:null、false、int、string 都会变成合法数组(如(array)null === []) -
is_array($var) ? $var : []—— 显式判断,语义更清晰
✅ 正确写法示例:
$a = get_config('user'); // 可能为 null
$b = $user_data; // 可能未定义或为 string
$result = array_merge((array)$a, (array)$b, (array)$extra);
合并前统一过滤/校验
如果你需要更严格的控制(比如只合并“有效数组”,跳过空数组或非法值),可以先预处理:
- 用
array_filter()去掉空值(注意:它会过滤掉0、false、''等“falsy”值,慎用) - 用
array_values()重置键名(避免合并后键名混乱) - 封装一个安全合并函数:
function safe_merge(...$arrays) {
$valid = [];
foreach ($arrays as $arr) {
if (is_array($arr)) {
$valid[] = $arr;
} else {
$valid[] = [];
}
}
return array_merge(...$valid);
}
$result = safe_merge($a, $b, $c); // 不怕 null 或 string
调试技巧:快速定位哪个参数出问题
加一句临时日志,打印各参数类型和值:
var_dump([
'a' => $a, 'type_a' => gettype($a),
'b' => $b, 'type_b' => gettype($b),
]);
或者用 assert(is_array($a), 'Param a must be array'); 在开发环境辅助排查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











