开发的过程中遇到一个很是奇怪的问题,是这样的
代码中有一个foreach循环,但是有时却无法将数据遍历出来
……
foreach ($hotels as $k=>$v){
if($k!="total"){
echo "eid:".$v['HotelId']."/n";
}
}
……
$hotels是个数组,结构是这样的
Array
(
[0] => Array
(
[HotelName] => 北京奥体公寓
[HotelId] => 40101765
[StarCode] => 4
[HotelAddress] => 北京市朝阳区安定路1号
[LowestPrice] => 420
)
[total] => 1
)
上段代码目的是将数组内酒店id输出,但数组中有下标为total的元素,需要把它过滤掉,于是就有了那个判断。
但是对于上个数组,使用上面的代码却无法输出任何东西。
后来发现是if那里出问题了,就是当k=0的时候,if判断结果为false
原来在php是弱数据类型的,不同数据类型之间会自动转换。当字符串与整数使用值相等(==)或值不等(!=)比较的时候,会将字符串转换为整数,任何非数字开头的字符串转换为整型的结果都是0,这样就会造成当$k为整数0时,if($k!="total") 结果为false。
若要解决上问题就需要用使用绝对相等"===",此处我们是判断不等,所以要使用"!=="。
所以代码应该改成这样
……
foreach ($hotels as $k=>$v){
if($k!=="total"){
echo "eid:".$v['HotelId']."/n";
}
}
……
附:其实上面的问题还有另外一种更好的解决办法,就是先将数组中total的值保存到其他变量中,然后unset($hotels['total']),直接foreach就可以了,不需要再进行任何判断。