使用 php 将 foreach 循环的结果写入 json
write the results of foreach loop to json with php
我是 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第一名...
你需要在每次迭代时将它推入 $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));
您的问题似乎是您正在创建单独的数组并将它们写入文件,而不是创建一个大 "array of arrays" 然后将其写入文件。
改用这一行:
$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));
我是 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第一名...
你需要在每次迭代时将它推入 $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));
您的问题似乎是您正在创建单独的数组并将它们写入文件,而不是创建一个大 "array of arrays" 然后将其写入文件。
改用这一行:
$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));