==比较多维数组只检查键值对是否一致,不关心键顺序和类型;===则要求键顺序、类型、结构完全相同;in_array()和array_search()默认用==易误判,应显式启用strict模式。

用==比较多维数组时,只看键值对是否一致
PHP 的 == 对数组做“松散相等”判断:递归比对每个键和对应值,只要所有键名、键值(含嵌套数组的结构)相同,就返回 true,**不关心键的顺序,也不检查值的类型是否严格一致**。
常见错误现象:['a' => 1, 'b' => [0]] == ['b' => [0], 'a' => 1] 是 true;['id' => '123'] == ['id' => 123] 也是 true——字符串 '123' 和整数 123 在 == 下被当作相等。
使用场景有限:仅适用于你明确接受类型混用、且不依赖键顺序的配置合并校验或测试快照比对(比如某些单元测试中故意忽略顺序差异)。
用===比较多维数组时,顺序、类型、结构全都要对上
=== 是“全等”,它要求两个数组:键名顺序完全一致、每个值的类型和值都相同、嵌套数组也必须满足同样规则。哪怕只是 [1, 2] === [1.0, 2.0] 都是 false(整数 vs 浮点数)。
典型例子:['a' => 0, 'b' => []] === ['a' => '0', 'b' => []] → false('0' 是字符串,0 是整数);['x' => 1, 'y' => 2] === ['y' => 2, 'x' => 1] → false(键顺序不同)。
参数差异:无参数,纯运算符行为;但实际结果高度依赖 gettype() 和 array_keys() 的输出一致性。
in_array() 和 array_search() 默认用==,容易误判嵌套数组
这两个函数默认 $strict = false,内部用 == 比较,所以对多维数组做查找时极不可靠:
-
in_array(['a' => 1], [['a' => '1']], false)返回true('1' == 1) -
in_array([0], [[false], ['']], false)也可能返回true(false == 0,'' == 0)
正确做法:显式传 true 启用严格模式:in_array(['a' => 1], [['a' => '1']], true) → false;或者改用 array_reduce() + === 手动遍历。
性能差异几乎可以忽略,但逻辑风险差一个数量级
底层都是深度遍历,=== 略快(跳过类型转换),但耗时差异在纳秒级。真正的问题在于:一旦数组里混入 null、false、0、'' 或数字字符串,== 就会开始“猜你想比什么”,而 === 会立刻告诉你:“它们就是不一样”。
容易踩的坑:用 == 判断 API 返回的 JSON 解析结果(如 json_decode('{"count":"0"}') → ['count' => '0'])是否等于预期数组,结果因类型不一致静默失败。
复杂点在于:即使你写了 ===,如果源数据本身类型就不稳定(比如来自 $_GET 或未过滤的 JSON),那问题不在比较运算符,而在上游数据没做类型归一化。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











