【发布时间】:2011-04-19 11:24:56
【问题描述】:
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
reset($arr);
while (list($k, $v) = each($arr)) {
print "$k => $v\n";
$h[] = $arr;
}
【问题讨论】:
标签: php infinite-loop
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
reset($arr);
while (list($k, $v) = each($arr)) {
print "$k => $v\n";
$h[] = $arr;
}
【问题讨论】:
标签: php infinite-loop
使用foreach($arr as $k => $v) 而不是reset($arr); while(...)
它失败的原因是$h[] = $arr;如果内部数组指针在末尾,则重置它,因此循环从头开始。
【讨论】:
$arr,$h 是一个不同的数组......或者我错过了什么明显的东西?
$arr 作为右值。并且复制数组显然会重置其指针。又一个为什么 PHP 很棒的例子!
while (list($k, $v) = each($arr)) 是 PHP3 遍历数组的方法。所以这很好 - 但是一旦你修改数组(包括它的内部指针),它就会停止这样做。 foreach() 不会遇到这个问题,因为它总是对数组的副本进行操作。
盗贼大师是对的。通过$arr 的分配,您在最后一个元素处重置内部指针。使用 foreach() 时,您将使用原始数组的副本。
【讨论】: