Я новичок в PHP и JSON и пытаюсь записать некоторые данные (которые я взял из API Instagram) в файл json. Я знаю, что я успешно расшифровал и извлек массивы из Instagram в foreach()
цикл, потому что я могу повторить их, но я не могу написать их в JSON должным образом. Когда я это делаю, я просто получаю один массив, а не их коллекцию … вот мой код:
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'];
};
//I've tried wrapping this below in a foreach loop as well, but without success
$values = array(
'id' => $id,
'url' => $url,
'likes' => $likes,
'date_shot' => $date_shot,
);
file_put_contents('mydata.json', json_encode($values, JSON_FORCE_OBJECT)); // I wondered if force_object was the problem, but same result without it...
То, что я получаю, это, только один раз (последний в цикле):
{
id: "123_456",
url: "http://whatever.jpg",
likes: 5,
date_shot: "Jan 19, 2015"}
Когда я надеюсь получить (я думаю) что-то вроде этого (весь цикл):
{
0: {
id: "123_456",
url: "http://whatever.jpg",
likes: 5,
date_shot: "Jan 19, 2015"}
1: {
id: "123_457",
url: "http://whatever2.jpg",
likes: 10,
date_shot: "Jan 21, 2015"}
2: {...}
}...
В конечном итоге цель будет состоять в том, чтобы объединить этот json-файл с его обновленной версией в растущий файл, в случае, если это будет иметь значение для наилучшего подхода к записи в json в первую очередь …
Ваша проблема заключается в том, что вы создаете отдельные массивы и записываете их в файл, а не создаете большой «массив массивов», а затем записываете его в файл.
Попробуйте эту строку вместо:
$values[] = ...
Квадратные скобки после $ values означают, что $ values станет многомерным массивом.
Он должен быть перемещен внутри цикла foreach, поэтому полный код теперь будет выглядеть так:
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[] = array(
'id' => $id,
'url' => $url,
'likes' => $likes,
'date_shot' => $date_shot,
);
);
file_put_contents('mydata.json', json_encode($values, JSON_FORCE_OBJECT));
Вы должны помещать его в $ значения в $ arr на каждой итерации
$arr = array();
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 = array(
'id' => $id,
'url' => $url,
'likes' => $likes,
'date_shot' => $date_shot,
);
array_push($arr, $values);
};
file_put_contents('mydata.json', json_encode($arr, JSON_FORCE_OBJECT));