PHP扁平数组差值查询:代码问题排查及正确实现方法
问题排查与解决方案
嘿,我来帮你捋清楚这个问题!
为什么你的if语句从未执行?
你仔细看一下两个数组的内容:
- 数组
$A的元素是:['dog', 'cat', 'monkey'] - 数组
$B的元素是:['cat', 'rat', 'dog', 'monkey']
$A里的每一个元素全部都存在于$B中!所以当你循环$A里的动物时,in_array($animal, $B)每次都会返回true,取反后!in_array(...)就变成了false,自然if块里的代码永远不会执行啦。
正确的数组值存在性检查方法
根据你的需求(查找一个扁平数组中不存在于另一个扁平数组的值),分两种场景给你解决方案:
场景1:找$B中不存在于$A的值
如果你其实是想找出$B里有但$A没有的元素(比如例子里的rat),只需要把循环的对象换成$B就行:
$A = ['dog', 'cat', 'monkey']; $B = ['cat', 'rat', 'dog', 'monkey']; foreach ($B as $animal) { if (!in_array($animal, $A)) { echo "$animal doesn't exist<br>"; } } // 执行后会输出:rat doesn't exist<br>
场景2:用内置函数更高效处理数组差集
PHP提供了array_diff()函数,可以直接计算两个数组的差集,不用手动写循环,代码更简洁高效:
$A = ['dog', 'cat', 'monkey']; $B = ['cat', 'rat', 'dog', 'monkey']; // 查找$A中不存在于$B的元素(这里结果是空数组,因为$A的元素都在$B里) $onlyInA = array_diff($A, $B); foreach ($onlyInA as $animal) { echo "$animal doesn't exist<br>"; } // 查找$B中不存在于$A的元素 $onlyInB = array_diff($B, $A); foreach ($onlyInB as $animal) { echo "$animal doesn't exist<br>"; } // 执行后会输出:rat doesn't exist<br>
额外提示:严格类型检查
如果你的数组里混合了不同类型的值(比如字符串和数字),可以给in_array()加上第三个参数true,开启严格类型匹配,确保值和类型都完全一致才会返回true:
// 示例:严格检查 $arr = ['123', '456']; var_dump(in_array(123, $arr)); // 输出bool(true) var_dump(in_array(123, $arr, true)); // 输出bool(false),因为123是整数,而数组里是字符串'123'
内容的提问来源于stack exchange,提问作者user4317723
相关产品推荐
相关产品推荐

