PHP数组专用运算符仅有+、==、===、!=、!==;+为左优先覆盖式联合,非array_merge();==不校验顺序与键类型,===要求键值、顺序、类型全等;无减法或交集运算符,需用array_diff/intersect*函数。

PHP数组运算符有哪些
PHP里真正算“数组专用”的运算符只有 +、==、===、!=、、!== 这几个,其余如 =、.、?: 等是通用运算符,只是能用在数组上而已。
+ 是数组联合,不是合并
很多人误以为 + 等价于 array_merge(),其实完全不是——它做的是“左优先覆盖式追加”:
-
$a + $b把$b中「键不存在于$a」的元素加到$a后面,$a已有的键(哪怕值为null或false)会被保留,$b对应键的值直接被忽略 - 数值索引不重排,
$a = [0 => 'x']; $b = [0 => 'y', 1 => 'z']; $a + $b结果是[0 => 'x', 1 => 'z'],不是[0 => 'x', 1 => 'y', 2 => 'z'] - 它不递归,嵌套数组会被整体覆盖,不会逐层合并
想真正合并(含重排数字键、递归处理),必须用 array_merge() 或 PHP 8.1+ 的 array_merge_recursive()。
== 和 === 判等逻辑差异极大
这两个运算符对数组的比较规则完全不同,容易踩坑:
立即学习“PHP免费学习笔记(深入)”;
-
$a == $b只要求键值对相同,**不要求顺序一致**,也不校验键的类型(比如字符串"0"和整数0在键位置会被视为相同) -
$a === $b要求:键值对完全相同 + **顺序严格一致** + **所有键和值的类型都一致**(例如0和"0"作键就不等) - 空数组
[] === []是true,但[0 => 'a'] == ['a']是false(前者是关联数组,后者是索引数组,键不同)
调试时如果发现 == 返回 true 但业务逻辑没走对,大概率是键顺序或隐式类型转换导致的假阳性。
没有数组减法或交集运算符
PHP 没有类似 - 或 & 这样的内置数组差集/交集运算符。常见需求得靠函数:
- 差集:
array_diff()(按值)、array_diff_key()(按键)、array_diff_assoc()(键值全比) - 交集:
array_intersect()、array_intersect_key()、array_intersect_assoc() - 注意:这些函数返回新数组,不修改原数组;且参数顺序敏感,比如
array_diff($a, $b)是“$a里有但$b里没有的值”
试图写 $a - $b 会直接报 Fatal error: Unsupported operand types,PHP 不支持该语法。
最常被忽略的一点:数组运算符全部不处理引用关系。$c = $a + $b 生成的是全新数组,哪怕 $a 或 $b 里有引用变量,结果里也变成值拷贝。需要保持引用,只能手动用 & 显式赋值或改用函数式操作。



















