in_array()的隐式转换
代码:
<?php
$arrayList = [
0,1,2,3,4,5,6,7,8,9,'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15,'G'=>16
];
$num = 'S';
var_dump(in_array($num,array_keys($arrayList)));
var_dump(array_keys($arrayList));
?>
结果:
bool(true)
[0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G']
现象描述:从上面的代码可以看到,“S”并不在那个数组中,但结果确是true???
现象解释:
php的in_array()方法在查找时运用了类型转换,‘S’与数字0比较时,字符串会被转化为0,因此返回true。
如果想实现===严格比较,可在数组后多加一个参数true。
替换解决方案:
1、isset($arrayList[$num]);
2、array_key_exists($num,$arrayList);
推荐文章: