0

我发现在 PHP 中我可以使用两种类型的 foreach。

这是代码:

$p2 = array('copier' => "Copier & Multipurpose",  
    'inkjet' => "Inkjet Printer",            
    'laser' => "Laser Printer",              
    'photo' => "Photographic Paper");

echo "p2 element: " . $p2['inkjet'] . "<br>";

foreach ($p2 as $item => $desc)          
{                                           
    echo "$item -> $desc <br />";
}

echo "<br />";

while (list($item, $desc) = each($p2))              
{
    echo "$item -> $desc <br />";
}  

第二个 while 循环不会遍历项目。为什么?

4

1 回答 1

2

第一个foreach()完成后,$p2 上的内部“当前位置”指示器位于数组的末尾。您需要指向reset()该指针,以便 while() 循环再次从头开始。例如

foreach($p2 as $item => $desc) {
    ....
}
reset($p2);  // <--you need this
while(list(...) = ...) {
 ...
}

foreach()每次你 foreach() 数组时都会为你隐式重置,所以如果你的代码是相反的(while循环然后是foreach),你就不会有这个问题。

于 2013-07-21T22:01:35.820 回答