PHP中使用foreach引用需要注意的問題


本文目的

今天在寫項目時,發現php foreach語句中使用引用會出現奇特現象,故此記錄此現象,原因和解決方法。希望對其他人有幫助!

現象

猜猜下面的代碼會輸出什么?

<?php
$a = array(1=>'one', 2=>'two');

foreach ($a as $key => &$val) {} // do nothing
var_dump($a);
 
foreach ($a as $key => $val) {} // do nothing
var_dump($a);

如果沒有遇到過類似的問題,肯定會對結果大驚!如下圖

image001.jpg

我勒個去,怎么修改了數組,代碼中沒有任何顯示修改數組的操作呀!

 

原因

在foreach中使用了引用,&$val,這個值並沒有在第一個foreach退出后自動清空,而是保留在內容中,當進入第二個foreach時,仍然可以訪問到$val。所以,在第二個foreach的第一次循環時,實際上已經修改了$a[1]的值。第二次循環時,值保持不變。

解決方案

第一次循環退出后,unset這個臨時變量$val,如下代碼所示:

<?php
$a = array(1=>'one', 2=>'two');
 
foreach ($a as $key => &$val) {} // do nothing
unset($val); // important!
var_dump($a);

foreach ($a as $key => $val) {} // do nothing
var_dump($a);

輸出結果如下:

image002.jpg

 

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM