Мне нужно объединить файлы 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_replace