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);
推荐文章: