2013-07-21 42 views
0

我發現在PHP中我可以使用兩種類型的foreach。我的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循環沒有過的項目進行迭代。爲什麼?

+0

什麼是預期產出,你會得到什麼?你在調試階段做了什麼? –

+0

我已經預期兩次「複印機 - >複印機和多用途 噴墨 - >噴墨打印機 激光 - >激光打印機 照片 - >攝影紙」但我得到的只是一次...我不知道如何調試。 ..當我把那裏只是一個foreach或while-每個它運作良好 –

回答

2

完成第一個foreach()之後,$ p2上的內部「當前位置」指示符位於數組的結束位置。您需要reset()指針,以便while()循環再次從頭開始。例如

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

foreach()你每次做這個重置爲您隱的foreach()的陣列,因此,如果你的代碼已經倒過來(while循環再foreach),你不會有這個問題。

+0

超級!這很好用! :)謝謝,我可以在9分鐘內給你接受的答案,所以我會晚點來點擊它!非常感謝 :) –