如何仅使用新元素更新json文件?

时间:2014-07-15 16:48:29

标签: php json codeigniter

我从另一个页面中收到一个带有许多元素的json,其中一个是id。我想要做的是创建一个只有id的新json,所以这就是我正在做的事情:

首先,解码json以作为文件存储在服务器中。它存储在一个数组中。从那里我将所有id存储在另一个数组中,这是我正在做的简化版本:

$json_array = json_decode(file_get_contents('path/to/file.json'));
foreach($json_array as $arr){
$ids[] = $arr['id'];
}

file_put_contents('ids.json', json_encode($ids));

到目前为止它正在做我想要的事情,我得到了一个带有所有id的json。问题是,我的json文件更新,只显示最后50个项目。所以每当调用它时,我得到最后50个id。例如,如果我有50个项目,那么我的json的id为1到id 50,但是如果我有60个项目,它会从id 10显示到id 60,所以前10个id被替换掉了。

我想保留前10个ID,但仍然使用新的ID更新并避免重复。问题是,在我给出的示例中,项目10到50是相同的,只有最后10个是新的。我不确定这是否可行。要明确:

我当前的json: ID是1 - 50。

更新json:项目10 - 60(10到50之间的项目与之前相同)。

我想让我的json保持: id为1 - 60,没有重复。 (每当有更新时保留这个,所以如果json有100到150个项目,我的id json会存储1到150的id。)

我给数字作为例子更清楚,它并没有真正更新10个新项目,它可能是任何随机数。哦,我正在和Codeigniter合作,如果有任何帮助的话。

感谢您的帮助和时间,我已经在Google上搜索了解决方案,但我不确定该寻找什么。

1 个答案:

答案 0 :(得分:2)

您需要读取目标文件,解码它的内容,检查数组是否包含新项目,如果没有,请将其附加到数组中。

$ids = json_decode(file_get_contents('ids.json'));
$json_array = json_decode(file_get_contents('path/to/file.json'));
foreach($json_array as $arr){
    if (!in_array($arr['id'], $ids)) $ids[] = $arr['id'];
}

file_put_contents('ids.json', json_encode($ids));