foreach遍历的疑问

foreach遍历的疑问

<?php

//定义数组

$arr=[1,''=>true,24=>'Harry Potter',''=>'javascript','class'=>'English'];

//输出数组该使用哪个输出函数?

print_r($arr);

//第一步:重置数组指针(将数组指针移到数组开头)


//第二步:通过数组指针的移动,遍历输出每一个元素的键名和键值

//从前往后遍历数组,

foreach($arr as $key=>$val){

    echo '当前指针所在位置元素的键名为:',$key,'<br>';

    echo '当前指针所在位置元素的键值为:',$val,'<br>';

    echo '<br>';

    next($arr);

    

}



echo '<hr>';

echo'<hr>';


end($arr);



//从后往前遍历数组(步骤与从前往后遍历数组类同,小伙伴自己尝试一下吧)


foreach($arr as $key=>$val){

    

echo '当前指针所在位置元素的键名为:',key($arr),'<br>';

echo '当前指针所在位置元素的键值为:',current($arr),'<br>';

prev($arr);


echo'<br>';


}





?>


正在回答 回答被采纳积分+1

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

2回答
imooc_澈 2018-06-11 10:41:40

你好,你这里foreach中的$arr是一个副本,当 foreach 开始执行时,副本数组内部的指针会自动指向第一个单元,每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元),你在循环中操作的prev($arr)操作的是原数组,对循环中value的输出没有影响。

这道题使用while循环配合数组指针操作函数即可,参考如下

从前往后:

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

从后往前:

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

如果解决了你的疑问,请采纳,祝学习愉快~

提问者 慕盖茨6742792 2018-06-10 18:22:03

补充下问题,第一次从前往后遍历数组,用$key和$val,可以顺利得到键值对,第二次重置了数组内部指针,将指针指向了最后一个键,我在使用foreach结合prev(),使用$key和$val却得不到从后往前的结果,任然是从前往后的,如何解释?改用current()和key()后顺利的到结果。

当我从后往前遍历时,采用foreach($arr as $key=>$val)和prev(),是因为foreach是针对数组副本操作,prev()是对原数组操作么,对foreach而言,无论用几次,数组内部指针是不是还是在第一个键值那,依旧按前往后一个个遍历循环体?

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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