cURL和json数据转换为数组并仅获取临时数据

时间:2014-12-23 15:26:05

标签: php arrays json curl

我是使用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'];
  }
}

4 个答案:

答案 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)

将CURLOPT_RETURNTRANSFER选项设置为true的

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'];
  }
}