我是使用json数据的新手。我试图使用cURL调用api并将其转换为数组。我只想使用foreach循环的临时数据。但是我得到了为foreach()错误提供的无效参数。我的代码
$cSession = curl_init();
curl_setopt($cSession,CURLOPT_URL,"http://api.openweathermap.org/data/2.5/forecast/daily?q=dhaka%2Cbangladesh&mode=json&units=metric&cnt=3");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession,CURLOPT_HEADER, false);
$result = curl_exec($cSession);
curl_close($cSession);
//echo $result;
//$i = 3 as i am requesting 3 day data
for ($i=0; $i <3 ; $i++) {
foreach ($result as $value) {
echo $value['temp'][0]['day'];
echo $value['temp'][0]['min'];
echo $value['temp'][0]['max'];
echo $value['temp'][0]['night'];
echo $value['temp'][0]['eve'];
echo $value['temp'][0]['morn'];
}
}
答案 0 :(得分:1)
结果是JSON,您应首先使用json_decode
进行解析
使用更多代码进行编辑:
...
$result = json_decode($result,true);
for ($i=0; $i <3 ; $i++) {
foreach ($result['list'] as $value) {
echo $value['temp']['day'];
echo $value['temp']['min'];
...
答案 1 :(得分:1)
使用curl_exec
,您将获得一个json作为字符串,您必须先解析它才能使用它。
试试这个:http://php.net/manual/en/function.json-decode.php
如果您希望将结果作为数组,请不要忘记将第二个参数设置为true。
答案 2 :(得分:1)
这应该适合你:
$json = json_decode($result);
$res = $json->{'list'};
foreach ($res as $value) {
echo $value->{'temp'}->{'day'} . "<br>";
echo $value->{'temp'}->{'min'} . "<br>";
echo $value->{'temp'}->{'max'} . "<br>";
echo $value->{'temp'}->{'night'} . "<br>";
echo $value->{'temp'}->{'eve'} . "<br>";
echo $value->{'temp'}->{'morn'} . "<br>";
}
在您的查询字符串中,您有metric&cnt=3
这个值,如果您从cnt=10
获得,那么您需要提取的天数将包含10个结果。无需for
循环。
答案 3 :(得分:0)
curl_exec将返回获取您设置的url的结果,以便您的变量$ result为STRING。
你需要转换为数组:
$cSession = curl_init();
curl_setopt($cSession,CURLOPT_URL,"http://api.openweathermap.org/data/2.5/forecast/daily?q=dhaka%2Cbangladesh&mode=json&units=metric&cnt=3");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession,CURLOPT_HEADER, false);
$result = curl_exec($cSession);
curl_close($cSession);
$result = json_decode($result,true);
//echo $result;
//$i = 3 as i am requesting 3 day data
for ($i=0; $i <3 ; $i++) {
foreach ($result as $value) {
echo $value['temp'][0]['day'];
echo $value['temp'][0]['min'];
echo $value['temp'][0]['max'];
echo $value['temp'][0]['night'];
echo $value['temp'][0]['eve'];
echo $value['temp'][0]['morn'];
}
}