PHP操作指针遍历数组时需要注意的问题

有几种不同的数组遍历方式,根据数组的特点可以选择合适的方式进行遍历,其中有一种通过while函数与一些可操作数组内部指针的函数实现遍历的方式,但是在使用中需要注意一些问题。

常见的使用此方式的代码如下:

do{
    echo key($arr)."=>".current($arr)."\n";
}while(next($arr));

这样的方式有两个问题,一个是无论数组是否为空数组都至少执行一次,这样显然不是很合适,第二则是对于是否遍历结束的判断,next函数将数组中的内部指针向前移动一位,然后返回当前指针处单元的值,如果单元不存在则返回false。但是反过来next函数返回false并不能认定数组指针已经到达数组结尾,因为有可能单元本身为false,或者等同于false的非布尔值,即使使用严格比较也是无法判断的。prev函数与之类似。

比如,如果数组$arr为如下数组:

$arr=array("a"=>"a",1=>"b",false=>"c",3=>false,"d",null=>false,"f");

此时执行上面的代码返回结果如下:

a=>a
1=>b
0=>c

显然在未到达数组结尾时就停止了遍历。

正确的遍历方式应该如下:

while(key($arr)!==null){
    echo key($arr)."=>".current($arr)."\n";
    next($arr);
}

key函数返回数组内部指针指向的当前单元的键名,如果内部指针超出了元素列表范围或者是空数组,则返回null。由数组的定义可知,当数组的key为非整型或字符串类型时会进行强制转换,布尔值转换为整型,true为1,false为0,Null转换为空字符串。所以如果key函数返回值严格等于null时,就证明数组指针到达了数组末尾。

执行结果如下:

a=>a
1=>b
0=>c
3=>
4=>d
=>
5=>f

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值