使用php将foreach循环的结果写入json
我不熟悉PHP和JSON,我正在尝试将从Instagram API获取的一些数据写入JSON文件。我知道我已经在foreach循环中成功地解码并从Instagram中获取了数组,因为我可以将它们回显出来,但我似乎无法将它们正确地写入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 =
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));
循环的每次迭代都会覆盖变量的值。循环的每次迭代都会覆盖变量的值。成功!!谢谢你,琼斯!工作!!谢谢你,琼斯!