我需要合并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]作为键,并在匹配时覆盖整个子数组,但没有。。。它确实像我希望的那样不断地向文件中添加越来越多的文件,并且根据需要避免重复记录,但它不会更新现有记录。
您需要像这样交换array_merge中的参数:
$user_array = array_merge($user_array, $values);
我认为array_merge文档的这一部分应该对您有所帮助:
如果输入数组具有相同的字符串键,则后面的值因为该键将覆盖上一个。但是,如果数组包含数字键,以后的值不会覆盖原始值值,但将被追加。
你有数字键。因此,您可以手动合并它或使您的密钥字符串。
此外,如果您只需要替换元素,而不需要附加元素,则应查看array_replacement函数