在PHP中合并并覆盖id匹配的json文件

时间:2015-02-23 07:49:46

标签: php arrays json

我需要合并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]作为键,并在匹配时覆盖整个子数组,但不会......它确实会像我一样向文件添加越来越多的文件想要它,它也可以根据需要避免重复记录,但它只是不会更新现有记录。

2 个答案:

答案 0 :(得分:1)

你需要交换array_merge中的参数,如下所示:

$user_array = array_merge($user_array, $values);

答案 1 :(得分:0)

我认为array_merge文档的一部分可以帮助你:

  

如果输入数组具有相同的字符串键,则后面的值   该密钥将覆盖前一个密钥。但是,如果是数组   包含数字键,后面的值不会覆盖原始值   值,但会附加。

你有数字键。因此,您可以手动合并它或创建密钥字符串。

此外,如果你只需要替换元素,而不是附加元素,你应该看一下array_replace函数