PHP使用array_diff求数组差异时遗漏salutation键问题咨询
错误原因说明
- 你调用的
array_diff()是非关联值对比函数,它的判断逻辑仅检查第一个数组的元素值是否在第二个数组的所有值中存在,完全不绑定对应键名匹配,只要值在第二个数组的任意位置出现过就会被判定为无差异,不纳入返回结果。这种特性显然不符合你「相同键名下的值对比」的需求。 - 你遇到的
salutation键遗漏的问题,是因为array_diff()的等值判断会做字符串类型转换,空字符串/NULL这类特殊值如果刚好触发隐式转换匹配,或者第二个数组其他键名下存在相同的空值,就会被误判为无差异过滤。
正确实现方案
如果你需要对比相同键名下的值差异,应该使用带键名关联对比的array_diff_assoc()函数,示例代码如下:
$keys = array_keys(array_diff_assoc($array1, $array2));
调用后返回的差异键列表就会包含salutation、fname、lname三个符合预期的结果。
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

