为了账号安全,请及时绑定邮箱和手机立即绑定

将数据添加到 JSON 子数组

将数据添加到 JSON 子数组

PHP
qq_遁去的一_1 2021-06-28 12:45:04
这是我的 JSON 文件(database.json):{  "doctors": [    {      "ID": "ahmadakhavan",      "pass": "1234",      "name": "Ahmad Akhavan",      "profilePic": "address",    },    {      "ID": "akramparand",      "pass": "1234",      "name": "Akram Parand",      "profilePic": "address",    }  ],  "games": [    {      "ID": "shuttlefuel_1",      "locked": "0",      "logo": "gameLogo",    },    {      "ID": "birthdaycake",      "locked": "0",      "logo": "gameLogo",    }  ],  "users": [    {      "ID": "alirezapir",      "prescribes": [        {          "doctorName": "doctor1",          "done": "yes",          "gameId": "wordschain"        },        {          "doctorName": "doctor2",          "done": "no",          "gameId": "numberlab"        }      ],      "profilePic": "address"    },    {      "ID": "amirdibaei",      "pass": "1234",      "profilePic": "address"    }  ]}我想在prescribes数组下为特定 ID添加一个子项。下面是我在 PHP 代码中所做的: <?php   $username = $_REQUEST['name'];  $data = $_REQUEST['data'];  //Load the file $contents = file_get_contents('./database.json');  $arraydata = json_decode($data,true); //Decode the JSON data into a PHP array. $contentsDecoded = json_decode($contents, true );     foreach($contentsDecoded['users'] as $item){         if($item['ID'] == $username){             if(!isset($item['prescribes'])){                 $item['prescribes'] = Array();             }             array_push($item['prescribes'],$arraydata);            $json = json_encode($contentsDecoded, JSON_UNESCAPED_UNICODE );            file_put_contents('./database.json', $json);               exit('1');             exit;         }     }    exit('0');     exit; ?> 如果我$item['prescribes']在该行之后回显,array_push($item['prescribes'],$arraydata);我会看到添加了数据,但原始文件 ( database.json) 不会显示新添加的数据。
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您必须更改foreach()如下代码:-


foreach($contentsDecoded['users'] as &$item){ //& used as call by reference

    if($item['ID'] == $username){

        $item['prescribes'][] = $arraydata; //assign new value directly

        $json = json_encode($contentsDecoded, JSON_UNESCAPED_UNICODE );

        file_put_contents('./database.json', $json);  

        exit;

    }

}


查看完整回答
反对 回复 2021-07-02
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

更改您的 foreach 以更改 $contentsDecoded 数组:


foreach($contentsDecoded['users'] as $key => $item){

         if($item['ID'] == $username){

             if(!isset($item['prescribes'])){

                 $contentsDecoded['users'][$key]['prescribes'] = Array();

             }

             array_push($contentsDecoded['users'][$key]['prescribes'],$arraydata);

            $json = json_encode($contentsDecoded, JSON_UNESCAPED_UNICODE );

            file_put_contents('./database.json', $json);  

             exit('1');

             exit;

         }

     }


查看完整回答
反对 回复 2021-07-02
  • 2 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信