PHP在foreach中對$value賦值無效,應該用 ‘鍵’ 或者 &$value的形式

來源:互聯網
上載者:User

標籤:class   href   blog   bsp   str   net   tar   get   需要   

首先我們看下這段代碼:

foreach ($data as$value) {      $value[‘name‘] = ‘Hehe‘;  }  

$data中原始的資料為:

array(1) {
  [0] => array(2) {
    ["name"] => string(4) "Haha"
    ["xxxx"] => string(4) "XXXX"
  }
}

然後我們看運行結果發現,$data中的資料完全沒有改變

查閱資料我發現:

在文檔 PHP: foreach - Manual 可以看到裡面有這麼一段話:

每次迴圈中,當前單元的值被 <strong>賦給</strong> $value 並且數組內部的指標向前移一步  

 

 

PHP在這裡, 是直接複製當前單元的值,也就是說 $value 相當於是另外的一個變數,只是跟 $data 裡面的變數相同,除此之外跟 $data沒有任何關係。所以,我們給 $value 賦值並不能達到我們的目的。

解決辦法一

通過使用  鍵 $key 而不是使用$value;

foreach ($data as $key => $value) {      $data[$key] = ‘Hehe‘;  } 

解決辦法二

如文檔中寫的,可以使用在 $value之前加上& 來修改數組的元素。此方法將以 引用 賦值 而不是拷貝一個值;

文章中還有一句話需要注意:

Warning數組最後一個元素的 $value 引用在 foreach 迴圈之後仍會保留。建議使用 unset() 來將其銷毀。

 

最後再總結下: 當我們使用foreach需要改原數組中的值時,切記不要借用$value, 因為$value的值為複製的副本, 而非索引!!

PHP在foreach中對$value賦值無效,應該用 ‘鍵’ 或者 &$value的形式

聯繫我們

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