我需要合并json文件,并在id
匹配时覆盖,但不会覆盖。我的PHP是这样的:
foreach($instagram_array['data'] as $key => $image){
$id = $image['id'];
$url = $image['images']['standard_resolution']['url'];
$date_shot = date('M d, Y', $image['created_time']);
$likes = $image['likes']['count'];
$values[id] = array(
'id' => $id,
'url' => $url,
'likes' => $likes,
'date_shot' => $date_shot,
$tags = implode(', ', $image['tags']);
);
};
$user_array = array_merge($values, $user_array);
file_put_contents('myfile.json', json_encode($user_array, JSON_FORCE_OBJECT));
结果JSON就像这样:
{
123_456: {
id: "123_456",
url: "photo1.jpg",
likes: 22,
date_shot: "Feb 20, 2015",
tags: "tag1, tag2, tag3"
},
123_457: {
id: "123_457",
url: "//photo2.jpg",
likes: 20,
date_shot: "Feb 20, 2015",
tags: "tag1, tag5"
},...
我希望这可以使用[$ id]作为键,并在匹配时覆盖整个子数组,但不会......它确实会像我一样向文件添加越来越多的文件想要它,它也可以根据需要避免重复记录,但它只是不会更新现有记录。
答案 0 :(得分:1)
你需要交换array_merge中的参数,如下所示:
$user_array = array_merge($user_array, $values);
答案 1 :(得分:0)
我认为array_merge文档的一部分可以帮助你:
如果输入数组具有相同的字符串键,则后面的值 该密钥将覆盖前一个密钥。但是,如果是数组 包含数字键,后面的值不会覆盖原始值 值,但会附加。
你有数字键。因此,您可以手动合并它或创建密钥字符串。
此外,如果你只需要替换元素,而不是附加元素,你应该看一下array_replace函数