我的PHP foreach代码工作不正常


My PHP foreach code is not working properly

我发现在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循环不迭代项。为什么?

第一个foreach()完成后,$p2上的内部"当前位置"指示器位于数组的END。您需要reset()该指针,以便while()循环再次从开头开始。例如
foreach($p2 as $item => $desc) {
    ....
}
reset($p2);  // <--you need this
while(list(...) = ...) {
 ...
}

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