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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asty9000/article/details/82860124

有几种不同的数组遍历方式,根据数组的特点可以选择合适的方式进行遍历,其中有一种通过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

 

猜你喜欢

转载自blog.csdn.net/asty9000/article/details/82860124
今日推荐