我需要知道如何用新值更新解码的JSON数组(不过,我并不是说简单的array_push
)。
我要发布代码,这是我的Users.json
文件:
[
{
"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
文件,用于从URL字符串添加JSON对象:
// 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
在第二个中,我添加了一个附加的字符串对象,如下所示:
create.php?className=Users&string=lorem%20ipsum&username=johndoe
因此,我需要实现的是也将“ username”键添加到第一个对象中,就像在第二个对象上一样。换句话说,启动第二个URL字符串后,我的Users.json
文件应如下所示:
[
{
"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"
}
]
答案 0 :(得分:1)
正如注释中已经指出的那样,您不能将“ $ objects”传递给array_diff函数,因为它期望一个数组,而“ $ objects”是一个对象。
您可以通过如下调用对象来将其转换为数组:
$result = array_diff($jsonObjs, (array)$objects);
答案 1 :(得分:0)
正如我的@ miken32所指出的那样,我的$ objects对象不是一个数组,而是一个StdClass对象,因此我只需要替换:
$objects->
具有:
$objects[$key]
通过这种方式,$objects
成为有效的数组,我可以像这样使用array_diff():
$result = array_diff_assoc($jsonObjs, $objects);
print_r('DIFF: '.json_encode($result).'<hr>');
它会打印出有效的JSON数组。