PHP的弱数据类型

开发的过程中遇到一个很是奇怪的问题,是这样的

代码中有一个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判断结果为true

原来在php是弱数据类型的,不同数据类型之间会自动转换。当字符串与整数使用值相等(==)或值不等(!=)比较的时候,会将字符串转换为整数, 任何非数字开头的字符串转换为整型的结果都是0,这样就会造成当$k为整数0时,if($k!="total") 结果为true。

若要解决上问题就需要用使用绝对相等"===",此处我们是判断不等,所以要使用"!=="。

所以代码应该改成这样

……

foreach ($hotels as $k=>$v){
            if($k!=="total"){
                echo "eid:".$v['HotelId']."\n";
            }
        }
……

你可能感兴趣的:(PHP,数据类型,比较)