哈哈,PHP中使用foreach和引用導致程式BUG及解決辦法
PHP中使用foreach和引用導致程式BUG及解決辦法
foreach( $array as &$item ) { }
print_r( $array );
foreach( $array as $item ) { }
print_r( $array );
?>1234567
預期結果:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)123456789101112
實際結果:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 2
)123456789101112
在執行第一個使用引用的 foreach 時, 一開始, $v 指向 $ar[0] 的儲存空間,空間記憶體儲著 1 , foreach 結束時, $v
指向 $ar[2] 的儲存空間,空間記憶體儲著 3 。 下面要開始執行第二個 foreach 了,注意和第一個 foreach 不同, 第二個 foreach
沒有使用引用,那麼就是賦值方式, 即將 $ar 的值依次 賦值 給 $v 。 進行到第一個元素時,要將 $ar[0] 賦值給 $v 。
問題就在這裡,由於剛剛執行完第一個 foreach, $v 不是一個新變數,而是已經存在的、指向 $ar[2] 的那個 引用 , 如此一來,對 $v
進行賦值的時候,就將 $ar[0] = 1 寫入了 $ar[2] 的實際儲存空間, 相當於對 $ar[2] 進行賦值。 依此類推,第二個 foreach
執行的結果, 就是陣列的最後一個元素變成了倒數第二個元素的值。
解決辦法:
兩個foreach中間加一個unset($item);
$array = array(1,2,3);
foreach( $array as &$item ) { }
print_r( $array );
unset($item);
foreach( $array as $item ) { }
print_r( $array );
?>12345678
或者第二個foreach不要用$item,換成別的變數
$array = array(1,2,3);
foreach( $array as &$item ) { }
print_r( $array );
foreach( $array as $rs ) { }
print_r( $array );
?>
http://blog.163.com/m13146230227_3/blog/static/260660031201667222895/
http://blog.163.com/m13146230227_3/blog/static/26066003120166722813281/
http://blog.163.com/m13146230227_3/blog/static/26066003120166723453652/
http://blog.163.com/m13146230227_3/blog/static/26066003120166723859691/
http://blog.163.com/m13146230227_3/blog/static/2606600312016672437737/
http://blog.163.com/m13146230227_3/blog/static/26066003120166724551313/
http://blog.163.com/m13146230227_3/blog/static/2606600312016672507881/
http://blog.163.com/m13146230227_3/blog/static/26066003120166725345691/
http://blog.163.com/m13146230227_3/blog/static/26066003120166725530140/
http://blog.163.com/m13146230227_3/blog/static/26066003120166725850276/
http://blog.sina.com.cn/s/blog_14dc17b280102weep.html
http://blog.sina.com.cn/s/blog_14dc17b280102weeq.html
http://blog.sina.com.cn/s/blog_14dc17b280102weer.html
http://blog.sina.com.cn/s/blog_14dc17b280102wees.html
http://blog.sina.com.cn/s/blog_14dc17b280102weeu.html
http://blog.sina.com.cn/s/blog_14dc17b280102weew.html
http://blog.sina.com.cn/s/blog_14dc17b280102weex.html
http://blog.sina.com.cn/s/blog_14dc17b280102weey.html
http://blog.eastmoney.com/m6711124611311778/blog_441574295.html
http://blog.eastmoney.com/m6711124611311778/blog_441577660.html
http://blog.eastmoney.com/m6711124611311778/blog_441580318.html
http://blog.eastmoney.com/m6711124611311778/blog_441582275.html
http://blog.eastmoney.com/m6711124611311778/blog_441586047.html
http://blog.eastmoney.com/m6711124611311778/blog_441588435.html
http://blog.eastmoney.com/m6711124611311778/blog_441592446.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30065054/viewspace-2121738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php png失真的原因及解決辦法PHP
- PHP編譯錯誤及解決辦法PHP編譯
- mysql 目錄遷移導致無法找到relay log 解決辦法。MySql
- Win10系統KB4549951導致個人檔案丟失BUG的解決辦法Win10
- php中foreach的使用PHP
- [php]wmap應用程式無法啟動解決辦法PHP
- SpringBoot 迴圈引用解決辦法Spring Boot
- 錯誤初始化引數導致無法啟動的解決辦法
- 升級python2.7 導致xend 不能啟動解決辦法Python
- 時區錯誤導致oracle的EM不能啟動解決辦法Oracle
- Hive常見的bug與解決辦法。Hive
- 使用Hibernate+MySql+nativeSQL的BUG,以及解決辦法MySql
- PHP程式導致伺服器當機怎麼辦PHP伺服器
- Python中的棧溢位及解決辦法Python
- CAS導致的ABA問題及解決
- Kindeditor 漏洞導致網站被植入木馬檔案的解決辦法網站
- 網路卡故障導致區域網網路故障原因與解決辦法
- 表碎片起因及解決辦法
- Linux檔案系統破壞,導致系統無法啟動解決辦法Linux
- 使用Hibernate+MySql+native SQL的BUG,以及解決辦法MySql
- CentOS安裝Redis6由於GCC版本太低導致無法make的解決辦法CentOSRedisGC
- IE6中的常見BUG與相應的解決辦法
- Oracle statspack無法收集快照,及解決辦法Oracle
- PHP提示Notice: Undefined variable的解決辦法PHPUndefined
- 表碎片起因及解決辦法(zt)
- Oracle表碎片起因及解決辦法Oracle
- Dumpzilla工具第615行bug的解決辦法
- php通過createuser和grant命令無法建立資料庫使用者和授權的解決辦法PHP資料庫
- phpmyadmin在PHP7中顯示空白的解決辦法!PHP
- PHP中SESSION丟失(不能跨頁面傳遞)解決辦法PHPSession
- ueditor上傳圖片尺寸過大導致顯示難看的解決辦法
- 解決辦法:由於oracle版本不同導致匯入資料時失敗Oracle
- 記php-fpm重啟導致的一個bugPHP
- PHP執行環境之IIS FastCGI 程式意外退出解決辦法PHPAST
- IE CSS Bug系列:IE6中Min-Height的解決辦法CSS
- Swift中的迴圈強引用 【使用無主引用解決】Swift
- 【DataBase】:使用Oracle遇到的幾個問題及解決辦法DatabaseOracle
- npm使用過程中的一些錯誤解決辦法及npm常用命令和技巧NPM