2011-06-09 32 views
8

該代碼時產生意想不到的輸出:PHP foreach語句引用:意外的行爲,再利用迭代

$array=str_split("abcde"); 
foreach($array as &$item) 
    echo $item; 

echo "\n"; 
foreach($array as $item) 
    echo $item; 

輸出:

abcde 
abcdd 

如果使用&$item的第二循環,一切工作正常。

我不明白這段代碼會如何影響$array的內容。我可以認爲隱含的unset($header)會刪除最後一行,但雙重dd從哪裏來?

回答

11

這可以幫助:

$array=str_split("abcde"); 
foreach($array as &$item) 
    echo $item; 

var_dump($array); 

echo "\n"; 
foreach($array as $item) { 
    var_dump($array); 
    echo $item; 
} 

,你可以在最後一次迭代後看到$item$arraye)第四元素。

之後,您遍歷數組,將第4個元素更改爲當前的。所以在第二次循環的第一次迭代之後,它將是abcda,等到abcdd。並在最後一次迭代中,將第4個元素更改爲4th,如dd

+0

謝謝。無論如何,在第一次循環後,要從第四個元素「分離」$ item? – 2011-06-09 04:13:42

+2

@lenzai:'unset($ item);'---只要您不再需要它來防止這種混淆,通常會取消設置參考變量。 – zerkms 2011-06-09 04:16:19

+0

我的錯誤,我認爲沒有設置($ item會刪除$ array [4]。我想我錯了。 – 2011-06-09 04:20:08