PHP 7.4 引入数组展开运算符(...),可在数组字面量中直接展开数组或Traversable对象,语法更简洁、性能优于array_merge,且支持无参调用返回空数组。

PHP 7.4 在数组合并相关操作上并没有新增 array_merge 或 array_merge_recursive 的新参数或行为,但它引入了一项更灵活、更直观的语法特性——数组展开运算符(…),可替代部分传统合并场景,尤其在构造数组时更简洁高效。
数组展开运算符(…)
PHP 7.4 允许在数组字面量中直接使用 … 展开数组或可遍历对象,实现类似 array_merge() 的效果,但写法更轻量、语义更清晰:
- 支持任意数量的数组或 Traversable 对象,无需函数调用
- 是语言结构,性能优于
array_merge()(尤其在编译期可优化常量数组) - 不会触发 Notice,也不要求目标变量已定义
- 展开后自动扁平化为一维结构(不递归)
示例:
php
$a = [1, 2];
$b = [3, 4];
$combined = [0, ...$a, 5, ...$b, 6];
// 结果:[0, 1, 2, 5, 3, 4, 6]
?>
与 array_merge 的关键区别
展开运算符不是 array_merge() 的“升级版”,而是适用场景不同:
-
...$arr只能在数组定义([])中使用,不能用于已有数组的追加或运行时拼接 -
array_merge()仍适用于动态合并多个变量、处理键名覆盖/递归、或需返回新数组的通用逻辑 - 展开运算符对数字键天然“重排”,而
array_merge()同样会重排数字索引;两者在字符串键上都按顺序覆盖(展开无键冲突处理逻辑)
array_merge 本身的兼容性更新
PHP 7.4 对 array_merge() 做了一处实用改进:允许不传任何参数,此时直接返回空数组 []:
$empty = array_merge(); // PHP 7.4+ 合法,返回 []
// 旧版本会报 Warning:Missing argument
?>
注意:没有新增“递归合并”语法糖
虽然 array_merge_recursive() 在 PHP 7.4 中也支持无参调用,但它本身没有新增语法或行为。若需更可控的多层合并(如覆盖同名键而非强制转数组),仍需自定义逻辑或封装函数。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











