Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php将foreach循环的结果写入json_Php_Arrays_Json_Foreach_Instagram Api - Fatal编程技术网

使用php将foreach循环的结果写入json

使用php将foreach循环的结果写入json,php,arrays,json,foreach,instagram-api,Php,Arrays,Json,Foreach,Instagram Api,我不熟悉PHP和JSON,我正在尝试将从Instagram API获取的一些数据写入JSON文件。我知道我已经在foreach循环中成功地解码并从Instagram中获取了数组,因为我可以将它们回显出来,但我似乎无法将它们正确地写入json。当我这样做时,我只得到一个数组,而不是它们的集合。。。这是我的密码: foreach($instagram_array['data'] as $key => $image){ $id = $image['id']; $url =

我不熟悉PHP和JSON,我正在尝试将从Instagram API获取的一些数据写入JSON文件。我知道我已经在foreach循环中成功地解码并从Instagram中获取了数组,因为我可以将它们回显出来,但我似乎无法将它们正确地写入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 in$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)); 

在每次迭代中,您需要在$arr中将其推入$values

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

您的问题似乎是创建单个数组并将其写入文件,而不是创建一个大数组然后将其写入文件

试试这句话:

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

您的问题似乎是创建单个数组并将其写入文件,而不是创建一个大数组然后将其写入文件

试试这句话:

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

循环的每次迭代都会覆盖变量的值。循环的每次迭代都会覆盖变量的值。成功!!谢谢你,琼斯!工作!!谢谢你,琼斯!