我繼承了一個代碼庫,在其中我發現了一些精煉和“煮沸”的版本,如下所示$json = '[ {"id": 1, "val":"apple"}, {"id": 2, "val":"mango"} ]';$data = json_decode($json);$arr = [];foreach($data as $d){ $m->id = $d->id; $m->val = $d->val; $arr[] = $m;}print_r($arr);結果Array( [0] => stdClass Object ( [id] => 2 [val] => mango ) [1] => stdClass Object ( [id] => 2 [val] => mango ))我的問題是為什么當前的迭代會對它的前任產生任何影響?PHP 版本:7.2編輯:如果問題看起來與 json 有關,但事實并非如此,我深表歉意,相反,在我的代碼庫中,我有這些對象來自另一個稱為函數的對象。我使用 json_decode 只是為了說明問題
1 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
$m沒有明確定義。所以當 php 第一次遇到時$m,php 會創建這個變量。當你有->符號時,php 就會理解這是對象。所有其他迭代都只是使用同一個實例$m。
此外,啟用錯誤報告后,您會看到警告:
警告:從空值創建默認對象
而在 php8 中你會得到一個致命錯誤。
解決方案:
foreach($data as $d){
// explicitly define $m
$m = new stdClass;
$m->id = $d->id;
$m->val = $d->val;
$arr[] = $m;
}
- 1 回答
- 0 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消