PHP中foreach循環(huán)中使用引用要注意的地方
更新時間:2011年01月02日 13:30:01 作者:
發(fā)現(xiàn)了一個容易出錯,但是不懂得原理卻解釋不明白的問題,碰到類似問題的朋友可以參考下。
復(fù)制代碼 代碼如下:
foreach ($array as &$row) {
$row = explode('/', $row);
}
foreach ($array as $row) {
//do something
}
這么寫,在第二個循環(huán)會出邏輯錯誤,加入第二個循環(huán)中do something的地方是輸出$row,循環(huán)到最后一個的時候的輸出是倒數(shù)第二個元素,而不是最后一個
要這么寫
復(fù)制代碼 代碼如下:
foreach ($array as &$row) {
$row = explode('/', $row);
}
unset($row);
foreach ($array as $row) {
//do something
}
或者第一個循環(huán)這么寫
復(fù)制代碼 代碼如下:
foreach ($array as $key => $row) {
$array[$key] = explode('/', $row);
}
說一下原理
第一個循環(huán)使用了引用,循環(huán)結(jié)束后,$row引用的是$array數(shù)組的最后一個元素,當(dāng)開始第二個循環(huán)的時候,$row變量每次循環(huán)都會被賦一個新值,在php中,如果一個內(nèi)存空間是被引用的,那么當(dāng)改變它的時候是直接改變這塊內(nèi)存空間的值,也就是說,當(dāng)?shù)诙€foreach的第一次循環(huán),$array的最后一個元素的值就被改變?yōu)?array的第一個元素的值,第二次循環(huán)的時候,改變?yōu)榈诙€元素的值,倒數(shù)第二次循環(huán)的時候,被改變?yōu)榈箶?shù)第二個元素值,而最后一次循環(huán)的時候得道的值必然是那個倒數(shù)第二個值
當(dāng)然,如果php的for循環(huán)有作用域的話,也不會出現(xiàn)此問題.....
相關(guān)文章
將IP地址轉(zhuǎn)換為整型數(shù)字的PHP方法、Asp方法和MsSQL方法、MySQL方法
本篇文章是對IP地址轉(zhuǎn)換為整型數(shù)字的PHP方法、Asp方法和MsSQL方法、MySQL方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07PHP使用數(shù)組實(shí)現(xiàn)矩陣數(shù)學(xué)運(yùn)算的方法示例
這篇文章主要介紹了PHP使用數(shù)組實(shí)現(xiàn)矩陣數(shù)學(xué)運(yùn)算的方法,結(jié)合具體實(shí)例形式分析了php基于數(shù)組實(shí)現(xiàn)矩陣表示與運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05利用PHP判斷是手機(jī)移動端還是PC端訪問的函數(shù)示例
在平常工作開發(fā)中,我們通常需要開發(fā)出PC端和移動端兩個不同的系統(tǒng),從而根據(jù)訪問端的不同進(jìn)入到不同的操作界面中。下面這篇文章主要給大家介紹了關(guān)于利用PHP判斷是手機(jī)移動端還是PC端訪問的函數(shù)的相關(guān)資料,需要的朋友可以參考下。2017-12-12