以下这个明明不在数组里面,但是in_array判断为true,是怎么回事呢?
$arr = array('0E372033','0E372034','0E372035','0E372036','0E372037','0E372038','0E372039');if(in_array('0E372031',$arr)){
echo "true";
}
else{
echo "false";
}我知道in_array('',$arr,true) 这个能判断为false,我就是想知道没加第三个参数时为什么为true

解决方案 »

  1.   

    弱类型,,你试试'0E372033'=='0E372034' 就是true
      

  2.   

    php 把它当做科学计数法的数了当 in_array('0E3',$arr) 时,一样是 true
      

  3.   

    我就想知道为什么?
    '0F372033'=='0F372034' 却是false
      

  4.   

    那么你知道 echo 1E3; 得到的是什么吗?
      

  5.   


    #2版主是对的,,,字符串作为科学计数法格式对待,如echo 1E6;是百万一样$arr作为科学计数法,全是0.。。到底还是弱类型所致
      

  6.   

    具体是什么问题我也说不清楚,自己也循环试了一下,使用==号确实没有办法区分这样的字符串,但是使用===可以区分,我只能猜测PHP再使用==号逻辑符的时候会尝试将两边的字符转换为数字类型再比较,如果不能转换才做字符串比较,我把你上面的字符去掉引号后var_dump了一下,所有的显示的都是float(0),就是说全部是浮点型值为0,这里只是说下自己的猜想。