php使用in_array函数注意的问题

in_array函数在php开发的时候很常用,但是在使用过程中也会遇到难以调试的问题。比如
$arr = array(0,1,2,'b');这时你测试 echo in_array(1, $arr)输出结果为1,说明正常

但是 echo in_array('a', $arr)呢?  这时输出0还是1呢? 答案是1, 这是为什么呢?原来php的自动类型转换是由

string->int。而在string 'a' 转换为int类型就是0.所以会出现可能不是你所希望的结果。

还有一个更严重的问题,如果身份证验证的时候,也会出现问题。比如下面的语句,你觉得输出结果是什么呢?

$a = Array('510821199012177417');
$b='510821199012177433';
$c = in_array($b,$a);
var_dump($c);

答案是bool(true)。

但是你稍微改动一下,答案又变化了

$a = Array('510821199012177417');
$b='510821199012177443';
$c = in_array($b,$a);
var_dump($c);

答案是bool(false)。

为什么结果会是这样呢,目前我也没有搞太明白这个问题。

注意:array_search函数也会出现类似问题