2015-02-22 2 views
0

Я новичок в PHP и JSON и пытаюсь записать некоторые данные (которые я захватил из API Instagram) в json-файл. Я знаю, что я успешно декодировал и захватил массивы из Instagram в цикле foreach(), потому что я могу повторить их, но я не могу их правильно записать в json. Когда я делаю, я просто получить один массив, в отличие от коллекции из них ... вот мой код:написать результаты foreach loop to json с 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']; 
    }; 

//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

Каждая итерация Вашего цикла переписывает значения Варс. –

ответ

5

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

Попробуйте эту линию вместо:

$values[] = ... 

квадратных скобок после $ значений означает $ значения станут многомерным массивом.

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

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)); 
+0

Работал !! Спасибо, @jones! –

0

Вы должны нажать ее в $ значения в $ обр на каждой итерации

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