PHP中加号(+)是数组联合操作而非合并,保留左数组键值,右数组仅补充不存在的键;不等价于array_merge(),因后者会覆盖同名字符串键并重排数字索引。

PHP 中用加号(+)运算符合并数组,实际是数组的联合操作,不是传统意义上的“合并”或“追加”。它会保留左边数组的键值对,只把右边数组中键不存在于左边数组的元素添加进来;如果键已存在,右边的值会被忽略。
加号运算符的行为特点
它等价于 array_merge() 吗?不等价。关键区别如下:
- 加号(
+)按键名保留左侧优先,不重排数字索引,也不覆盖已有键 -
array_merge()按顺序覆盖:后一个数组同名字符串键会覆盖前一个;数字键则被重新索引 - 加号不修改原数组,返回新数组(和大多数运算符一样)
常见使用示例
比如:
$a = ['name' => 'Alice', 'age' => 25]; $b = ['age' => 30, 'city' => 'Beijing']; $c = $a + $b; // 结果:['name' => 'Alice', 'age' => 25, 'city' => 'Beijing'] // 注意:$b 中的 'age' 被丢弃了
再看数字键的情况:
$x = [0 => 'a', 1 => 'b']; $y = [1 => 'B', 2 => 'c']; $z = $x + $y; // 结果:[0 => 'a', 1 => 'b', 2 => 'c'] // $y[1] 没有覆盖 $x[1],$y[2] 因为 $x 没有键 2,所以被加入
什么时候适合用加号合并数组
适用于以下场景:
- 想以某个数组为“基础配置”,仅补充缺失的键(如默认配置 + 用户配置)
- 明确需要保留左侧键值、避免意外覆盖时
- 处理关联数组且关心键名语义,而非顺序或索引连续性时
注意事项和陷阱
需特别注意:
- 加号对数值索引数组容易产生误导:不会像
array_merge()那样自动重排索引,可能导致跳号或重复键(但加号本身会去重,只留左边) - 不能用于混合类型键(比如同时含字符串和数字键 0 和 '0'),PHP 会按类型区分,但易引发逻辑混淆
- 如果右边数组是
null或非数组,会触发警告;建议先用is_array()判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











