首先我們看下這段代碼:
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的值為復制的副本, 而非索引!!