亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將對象推送到數組會覆蓋以前的值

將對象推送到數組會覆蓋以前的值

PHP
翻閱古今 2024-01-19 10:18:33
我繼承了一個代碼庫,在其中我發現了一些精煉和“煮沸”的版本,如下所示$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;

}


查看完整回答
反對 回復 2024-01-19
  • 1 回答
  • 0 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號