2012-05-28 62 views
0

說我們有這個字符串數組:值轉換爲整數的在PHP中將字符串數組轉換爲整型數組時引用意外輸出時使用引用?

$arrString = ["1", "2", "3"]; 

一種傳統的方式是像這樣:

foreach ($arrString as $key => $value) 
    $arrString[$key] = (int) $arrString[$key]; 

echo var_dump($arrString); 

此輸出:

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 

很多期待。然而,我相信使用參考是一個更快的方式來完成相同的工作:

foreach ($arrString as &$strValue) 
    $strValue = (int) $strValue; 

echo var_dump($arrString); 

那麼猜猜它輸出什麼?

array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) } 

也就是說,它將最後一個值指定爲int的引用。當在循環中使用引用時(即使只有一個元素),這總是發生在最後一個元素上,而且如果使用(int)強制轉換或PHP的settype和intval函數,它也會發生。

它擊敗了我;這是爲什麼發生?我應該真的在意嗎?

+1

fyi-'array_walk($ arr,'intval');' – goat

+0

@chris - 整潔高效 –

回答

3

你應該關心,而且它已經在此之前這裏多次解釋(並有PHP的文檔中明確的警告)

unset($strValue); 

循環後

here作爲解釋

編輯

Reference

帖:

警告

參考$值和最後一個數組元素的連的foreach循環後仍然存在。建議通過unset()銷燬它。

+0

您是否有源代碼?我以爲我徹底搜索了這個。 –

相關問題