PHP 數組 foreach引用導致的bug

來源:互聯網
上載者:User

標籤:

<?php$arr = array(‘a‘, ‘b‘, ‘c‘);foreach($arr as &$v) {}foreach($arr as $v) {}var_dump($arr);/*結果為:array(3) {  [0]=>  string(1) "a"  [1]=>  string(1) "b"  [2]=>  &string(1) "b"}*///第一個foreach用引用賦值的方式將數組的值依次賦給了$v。$arr = array(‘a‘, ‘b‘, ‘c‘);foreach($arr as &$v) {}var_dump($v);//此時的$v的值為c,是引用賦值,$v指向了字串c的地址空間。//第二個foreach是以拷貝賦值的方式將數組的值依次賦值給了$v。//由於目前$v指向了c的地址空間,那麼改變$v的值即改變了c所佔地址空間的值。$arr = array(‘a‘, ‘b‘, ‘c‘);foreach($arr as &$v) {}foreach($arr as $v) {    var_dump($arr); break;}//第一次賦值將a賦值到了$v,原有c所佔的地址空間的值變為了a,此時數組就是array(‘a‘, ‘b‘, ‘a‘)。//以此類推第一次賦值c->a,第二次賦值即a->b,第三次賦值即b->b,//所以最終結果為array(‘a‘, ‘b‘, ‘b‘)。

這個問題是這樣的  foreach本身是一個賦值的過程, 第一次foreach結束的時候 $value和$arr[2] 兩個變數都指向了$arr[2],  第二次foreach的時候 每次foreach本質上是一次賦值行為, 也就是 $value = $arr[0;  這樣就把$arr[2] 賦成$arr[0]了  同理 第二次的時候$arr[2] = $arr[1]  導致 $arr[2]每次迴圈的時候都會被重新賦值

 

PHP 數組 foreach引用導致的bug

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.