PHP 8.0 中 array_merge 要求所有参数必须为数组,否则抛出 TypeError;支持多数组顺序合并及展开运算符传参,数字键重索引、字符串键后覆盖,推荐用 safe_array_merge 等健壮函数处理非数组值。

PHP 8.0 中用 array_merge 合并多个数组,写法和之前版本一致,但要注意参数必须全是数组,否则会报 TypeError(PHP 8.0+ 加强了类型检查)。
基本语法:传入多个数组参数
array_merge 接收任意数量的数组作为参数,按顺序合并,后面的键值会覆盖前面同名的数字键(重新索引),字符串键则保留后者值。
示例:
$a = [1, 2]; $b = [3, 4]; $c = ['name' => 'Alice', 'age' => 25]; $result = array_merge($a, $b, $c); // 结果:[0=>1, 1=>2, 2=>3, 3=>4, 'name'=>'Alice', 'age'=>25]
合并数组变量列表(使用 ... 展开运算符)
如果数组存在一个数组变量中(比如 $arrays = [$a, $b, $c];),可以用展开运算符 ... 传参:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 确保
$arrays是一维数组,且每个元素都是数组 - PHP 8.0 支持这种写法,无需额外判断
- 错误示例:
array_merge(...$arrays)中若某个元素不是数组,会直接报错
$arrays = [[1, 2], [3], ['x' => 'y']]; $result = array_merge(...$arrays); // ✅ 正确
注意 PHP 8.0 的严格类型要求
PHP 8.0 开始,array_merge 的所有参数必须是 array 类型,传入 null、string、int 等会触发 Fatal error: Uncaught TypeError。
- 安全做法:合并前用
is_array()过滤或转换 - 例如:
array_merge(...array_filter($arrays, 'is_array')) - 或用空数组兜底:
array_merge($a ?? [], $b ?? [])
替代方案:兼容非数组值的合并函数
如果数据来源不可控,可封装一个更健壮的合并函数:
function safe_array_merge(...$arrays): array {
return array_merge(...array_map(fn($a) => is_array($a) ? $a : [], $arrays));
}
$result = safe_array_merge([1], "not array", ['a' => 1]); // [0=>1, 'a'=>1]
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










