从后向前遍历数组为啥出现问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php //定义数组 $arr = $arr =[1, '' =>true,24=> 'Harry Potter' , '' => 'javascript' , 'class' => 'English' ]; //输出数组该使用哪个输出函数? print_r( $arr ); foreach ( $arr as $var ){ echo '当前指针所在元素键名' ,key( $arr ), '<br>' ; echo '当前指针所在元素键值' ,current( $arr ), '<br>' ; next( $arr ); } echo '<hr>' ; echo '<hr>' ; reset( $arr ); end ( $arr ); echo key( $arr ), '<br>' ; echo current( $arr ), '<br>' ; foreach ( $arr as $var ){ echo '当前指针所在元素键名' ,key( $arr ), '<br>' ; echo '当前指针所在元素键值' ,current( $arr ), '<br>' ; prev( $arr ); } //while (current($arr)){ // echo '当前指针所在元素键名',key($arr),'<br>'; // echo '当前指针所在元素键值',current($arr),'<br>'; // prev($arr); //} ?> |
50
收起
正在回答
2回答
您好,foreach使用时需注意:1.当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。2.由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。
下列代码中设置指针指向最后一个单元,遍历时将数组的内部指针倒回一位,但是foreach遍历时依旧是从第一个值输出至最后一个值。foreach是根据自己本身的遍历机制在运行,并没有受到更改指针而带来的影响。因此您的代码向后遍历无法成功,向前遍历成功是由于foreach本身可以进行遍历。
1 2 3 4 5 6 7 8 9 10 11 | <?php //定义数组 $arr =[1, '' =>true,24=> 'Harry Potter' , '' => 'javascript' , 'class' => 'English' ]; print_r( $arr ); echo '<hr>' ; end ( $arr ); foreach ( $arr as $key => $var ){ echo '当前指针所在元素键名' , $key , '<br>' ; echo '当前指针所在元素键值' , $var , '<br>' ; prev( $arr ); } |
如果解决了您的问题,请采纳,祝学习愉快!
好帮手慕查理
2017-11-22 10:53:46
您好,可参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php echo '<pre>' ; //定义数组 $arr =[1, '' =>true,24=> 'Harry Potter' , '' => 'javascript' , 'class' => 'English' ]; //打印数组 print_r( $arr ); //将数组的内部指针指向第一个单元 reset( $arr ); //检测指针是否存在,并循环输出 while (! is_null (key( $arr ))){ echo '当前指针所在位置元素的键名为:' .key( $arr ). '<br>' ; echo '当前指针所在位置元素的键名为:' .current( $arr ). '<br><br>' ; next( $arr ); } echo '<hr>' ; echo '<hr>' ; //将数组的内部指针指向最后一个单元 end ( $arr ); //检测指针是否存在,并循环输出 while (! is_null (key( $arr ))){ echo '当前指针所在位置元素的键名为:' .key( $arr ). '<br>' ; echo '当前指针所在位置元素的键名为:' .current( $arr ). '<br><br>' ; prev( $arr ); } echo '</pre>' ; ?> |
如果解决了您的问题,请采纳,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧