PHP中in_array奇怪的问题

技术 · 2012-05-02 · 4015 人浏览

    在in_array中有三个参数,一般用都是只用两个参数,如下以代码:

$arr = array('0E372033','0E372034','0E372035','0E372036','0E372037','0E372038','0E372039');

if(in_array('0E372031',$arr)){
        echo "true";
}
else{
        echo "false";
}

    按正常来说,这个肯定不在数组中,输出应该是false,但是这段代码输出却是true。

我又把代码改成如下:

$arr = array('0F372033','0F372034','0F372035','0F372036','0F372037','0F372038','0F372039');

if(in_array('0F372031',$arr)){
        echo "true";
}
else{
        echo "false";
}

    这个时候运行输出结果却是false。百思不得其解,到处请教和询问,终于找到了答案,原来0E372031这样的字符串在php的弱类型中会当着是科学计数法,所以就是0,这个时候判断in_array,和0E372033这样的值就相等了,解决方法就是如以下代码:

$arr = array('0E372033','0E372034','0E372035','0E372036','0E372037','0E372038','0E372039');

if(in_array('0E372031',$arr,true)){
        echo "true";
}
else{
        echo "false";
}

    用到in_array的第三个参数,强制判断其类型,这个时候输出false了,如果需要直接判断相等,请用’0E372031′ === ’0E372033′这样的判断才准确!

    以上是我自己在开发过程中遇到的问题,以记之。

in_array