PHP foreach 摘引

來源:互聯網
上載者:User
PHP foreach 引用
 'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',);$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}unset($val);foreach ($b as $val) {echo "-----$b[3]";echo $val."\n";}?>

'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',);$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}foreach ($b as $val) {echo "-----$b[3]";echo $val."\n";}?>

輸出:

-----val1val1
-----val2val2
-----val3val3
-----val3val3


可以看到,因為第一個foreach 的引用最後的$[2] 引用沒有關閉,所以,在第二個foreach 中已然在不斷的對地址進行寫操作;

通過列印$b[2] 的值,可以看出。隨著foreach 的運行,$b[2] 的值在不斷的改變。這就導致當foreach 運行到$b[1] 的時候,$b[2] 的值

就等於$b[1], 那麼在最後一次運行時,$b[2] = $b[2] 就是的結果與$b[1] 一樣了

解決方案:

使用unset () 方法將引用變數釋放後再進行第二次foreach 迴圈。

 'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',);$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}unset($val);foreach ($b as $val) {echo "-----$b[3]";echo $val."\n";}?>


輸出結果:

-----val4val1
-----val4val2
-----val4val3
-----val4val4

方案二(不怎麼好):

 'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',);$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}// unset($val);foreach ($b as $item) {echo "-----$b[3]";echo $item."\n";}?>

換掉第二次foreach 中的as 後的變數,不使用被引用的變數,那麼不會出現這樣的情況。

輸出:

-----val4val1
-----val4val2
-----val4val3
-----val4val4

總結: 建議在引用之後使用unset() 對其釋放。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.