объединить и перезаписать файл JSON, где совпадают идентификаторы, в PHP

0

Мне нужно объединить файлы 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
    Опубликовать массив значений $ и $ user_array
  • 0
    Смотрите здесь stackoverflow.com/questions/9241800/…
Теги:
arrays

2 ответа

1
Лучший ответ

Вам нужно поменять аргументы в array_merge следующим образом:

$user_array = array_merge($user_array, $values);
  • 0
    Боже мой, так просто, но никогда бы не подумал попробовать ... СПАСИБО!
0

Я думаю, что часть документов array_merge должна помочь вам:

Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий. Если, однако, массивы содержат числовые клавиши, более поздняя величина не будет перезаписывать исходное значение, но будет добавлена.

И у вас есть цифровые клавиши. Таким образом, вы можете объединить его вручную или сделать свои строки ключей.

Также, если вам нужно только заменить элементы, а не добавлять их, вы должны взглянуть на функцию array_replace

Ещё вопросы

Сообщество Overcoder
Наверх
Меню