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判断结果为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就可以了,不需要再进行任何判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值