这是php中的bug吗?,折磨了我一下午

复制代码
  1. <?php
  2. $os = array('0',"中车", "NT", "Irix", "Linux");
  3. $os[0]*=1;var_dump($os);
  4. $osa = array('0NT1','Irix','Linux','中车',0);
  5. foreach($osa as $val){
  6.     $b = in_array($val, $os);
  7.     var_dump($b);
  8. }
  9. ?>

当我将第3行注释的时候,一切正常,in_array函数得到一个false,五个true
当我不注释第3行的时候,数组发生了一个转换,这是得到的全是true,我是相当的不解啊!
希望朋友们不要再遇见我这样的问题
[ 此帖被crazhou在2011-08-05 17:42重新编辑 ]

作者: crazhou   发布时间: 2011-08-05

原因很简单,因为第二行的数据打印出来都是数组中的值都是字符类型的,当你执行第三行时,第一个值就被转换成int类型的,刚好你第四行的最后一个0是int类型的,当你开启之后自然就是五个true;不开启时两个0的数据类型不一样自然会返回一个false

作者: 李明_   发布时间: 2011-08-06

第三行没有注释情况下
array(5) { [0]=> int(0) [1]=> string(4) "中车" [2]=> string(2) "NT" [3]=> string(4) "Irix" [4]=> string(5) "Linux" }
array(5) { [0]=> string(4) "0NT1" [1]=> string(4) "Irix" [2]=> string(5) "Linux" [3]=> string(4) "中车" [4]=> int(0) }
bool(true) bool(true) bool(true) bool(true) bool(true)
第三行注释情况下
array(5) { [0]=> string(1) "0" [1]=> string(4) "中车" [2]=> string(2) "NT" [3]=> string(4) "Irix" [4]=> string(5) "Linux" }
array(5) { [0]=> string(4) "0NT1" [1]=> string(4) "Irix" [2]=> string(5) "Linux" [3]=> string(4) "中车" [4]=> int(0) }
bool(false) bool(true) bool(true) bool(true) bool(true)

作者: 李明_   发布时间: 2011-08-06

楼上这个位大哥,先感谢你,不过小弟我,还是有些不明白,
不管数组中的第一个元素转不转换,那'0NT1' 也不能和 'NT'是相等的吧?
在用in_array时总该,有一个false吧!

作者: crazhou   发布时间: 2011-08-06