猿问

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

<?php
echo "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-----100
1-----100
2-----120
3-----130
0-100
1-100
2-120
3-130

但如果把foreach和while语句的顺序替换后,
<?php
echo "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-100
1-100
2-120
3-130
从输出结果看,好像while语句没有执行,为什么呢?求大神指教。
在 while前加了 reset($persons);,两次代码输出结果一致了。
是不是因为foreach执行后,指针越界,所以while没有输出数据?
PHP不会自己提示数组越界吗?

慕侠2389804
浏览 212回答 2
2回答

子衿沉夜

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

临摹微笑

foreach循环是系统自动维护的。 each是指针向前移动一步。
随时随地看视频慕课网APP
我要回答