arrays — записывать результаты цикла foreach в json с помощью Stack Overflow

Я новичок в 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 в первую очередь …

0

Решение

Ваша проблема заключается в том, что вы создаете отдельные массивы и записываете их в файл, а не создаете большой «массив массивов», а затем записываете его в файл.

Попробуйте эту строку вместо:

$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));
6

Другие решения

Вы должны помещать его в $ значения в $ 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));
0

По вопросам рекламы [email protected]