为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下关于·foreach 与 while(each())的问题

请问一下关于·foreach 与 while(each())的问题

慕侠2389804 2021-12-02 07:07:49
<?phpecho "Hello world!<br />";$persons = array(100,100,120,130);while($element = each($persons)){echo $element['key'];echo '-----';echo $element['value'];echo '<br />';}foreach($persons as $key => $value){echo $key."-".$value."<br />";}?>代码运行结果:Hello world!0-----1001-----1002-----1203-----1300-1001-1002-1203-130但如果把foreach和while语句的顺序替换后,<?phpecho "Hello world!<br />";$persons = array(100,100,120,130);foreach($persons as $key => $value){echo $key."-".$value."<br />";}while($element = each($persons)){echo $element['key'];echo '-----';echo $element['value'];echo '<br />';}?>代码运行结果是:Hello world!0-1001-1002-1203-130从输出结果看,好像while语句没有执行,为什么呢?求大神指教。在 while前加了 reset($persons);,两次代码输出结果一致了。是不是因为foreach执行后,指针越界,所以while没有输出数据?PHP不会自己提示数组越界吗?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

foreach 时,一开始 数组指针会指向第一个位置
each 时,数组指针位置从当前开始,如果越界时,会返回 false;
所以在你第一次 foreach 完后,数组内部指针是在末尾, 第二次 用 each 时,就直接返回false,并不执行...
通常用 each 时,需要重置 数组内部指针到首位

查看完整回答
反对 回复 2021-12-05
?
临摹微笑

TA贡献1982条经验 获得超2个赞

foreach循环是系统自动维护的。 each是指针向前移动一步。

查看完整回答
反对 回复 2021-12-05
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信