Это мой файл 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 для определенного идентификатора.
Ниже показано, что я сделал в своем 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) не будет отображать новые добавленные данные.
(это означает, что эти новые данные не добавляются в $contentsDecoded)
@madalinivascu Хорошо :)) это всего лишь крошечный файл JSON...
почему ты не делаешь if (!isset($item['prescribes'])){ $item['prescribes'] =[$arraydata]; } ?
@madalinivascu, потому что я ДОБАВЛЯЮ новый элемент в массив prescribes, я не хочу полностью заменять его :)






Вы должны изменить код 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;
}
}
Измените свой 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;
}
}
что за «база данных» :)) это файл man файл json :)))