从后向前遍历数组为啥出现问题?

从后向前遍历数组为啥出现问题?

<?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);
//}
?>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

您好,foreach使用时需注意:1.当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。2.由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。

下列代码中设置指针指向最后一个单元,遍历时将数组的内部指针倒回一位,但是foreach遍历时依旧是从第一个值输出至最后一个值。foreach是根据自己本身的遍历机制在运行,并没有受到更改指针而带来的影响。因此您的代码向后遍历无法成功,向前遍历成功是由于foreach本身可以进行遍历。

<?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);
}

http://img1.sycdn.imooc.com//climg/5a1516220001b29e05620214.jpg

如果解决了您的问题,请采纳,祝学习愉快!

  • 庄海鑫 提问者 #1
    非常感谢!
    2017-11-23 00:16:15
好帮手慕查理 2017-11-22 10:53:46

您好,可参考:

<?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
    我想知道我foreach向前遍历可以,为什么向后遍历就出现了问题?
    2017-11-22 13:02:27
  • 慕粉3405150 回复 提问者 庄海鑫 #2
    你foreach可以向后到上吗
    2018-03-19 21:09:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师