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


首先我們看下這段代碼:

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的值為復制的副本, 而非索引!!


免責聲明!

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



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