Мне нужно знать, как обновить декодированный массив JSON новыми значениями (хотя я не имею в виду простое array_push
).
Я собираюсь опубликовать свой код, вот мой Users.json
file:
[
{
"objID":"Y0FVVFZYCV",
"createdOn":{"type":"__date","date":"2018-09-21T16:48:09"},
"string":"lorem ipsum"
},
{
"objID":"YShAUqIcMg",
"username":"johndoe", // new key->value here!
"createdOn":{"type":"__date","date":"2018-09-21T16:48:14"},
"string":"lorem ipsum"
}
]
Вот мой create.php
файл, где я использовал для добавления объектов JSON из строки URL:
// Prepare data to be saved:
if(!empty($_GET)){
foreach($_GET as $key => $value) {
// Random objID
$objects->objID = generateRandomID();
// Number
if( is_numeric($value) ){
$objects->$key = (float) $value;
// Boolean
} else if($value === 'true'){
$objects->$key = true;
} else if($value === 'false'){
$objects->$key = false;
// ClassName
} else if ($key === 'className'){
// String
} else { $objects->$key = $value; }
// createdOn & updatedOn Dates
$objects->createdOn = array('type'=>'__date','date'=>$formattedDate);
$objects->updatedOn = array('type'=>'__date','date'=>$formattedDate);
}// ./ foreach
// Save data into the JSON file
$jsonStr = file_get_contents($className.'.json');
// Decode the JSON string into a PHP array.
$jsonObjs = json_decode($jsonStr, true);
// Check if there's some new key and values -> update the $jsonObjs array
$result = array_diff($jsonObjs, $objects);
print_r('<br><br>DIFFERENCE: <br>'.$result[0].'<br>');
// Push array
array_push($jsonObjs, $objects);
// Encode the array back into a JSON string and save it.
$jsonData = json_encode($jsonObjs);
file_put_contents($className.'.json', $jsonData);
// echo JSON data
echo $jsonData;
Я пытаюсь получить разницу между $jsonObjs
и $objects
с array_diff()
:
$result = array_diff($jsonObjs, $objects);
print_r(.$result[0].'<br>');
но это не работает, показывает пустую строку, а также файл error_log показывает это:
PHP Warning: array_diff(): Argument #2 is not an array on line 63
Я запускаю2 строки URL, первая из которых начинается с
create.php?className=Users&string=lorem%20ipsum
Во 2-й я добавляю дополнительный строковый объект, например:
create.php?className=Users&string=lorem%20ipsum&username=johndoe
Итак, мне нужно добитьсядобавить ключ «username» в 1-й объект, как это делается для 2-го объекта.Другими словами, мой Users.json
файл должен выглядеть следующим образом после запуска второй строки URL:
[
{
"objID":"Y0FVVFZYCV",
"username":"", //<-- upodated key with no value
"createdOn":{"type":"__date","date":"2018-09-21T16:48:09"},
"string":"lorem ipsum"
},
{
"objID":"YShAUqIcMg",
"username":"johndoe", // new key->value here!
"createdOn":{"type":"__date","date":"2018-09-21T16:48:14"},
"string":"lorem ipsum"
}
]