对于每个循环使用json数据

时间:2013-05-22 22:17:49

标签: php json foreach

我在从wunderground api中提取潮汐数据时遇到了一个小问题。当我使用下面的代码拉出退潮的时间时,我得到一天的准确答案,但第二天的答案是错误的:

<?
$json_url = 'http://api.wunderground.com/api/b2b4a1ad0a889006/tide/q/NJ/Wildwood.json';



// jSON String for request
$json_string = '[http://api.wunderground.com/api/b2b4a1ad0a889006/tide/q/NJ/Wildwood.json]';

// Initializing curl
$ch = curl_init( $json_url );

// Configuring curl options
$options = array(
CURLOPT_RETURNTRANSFER => true,



);

// Setting curl options
curl_setopt_array( $ch, $options );

// Getting results
$result =  curl_exec($ch); // Getting jSON result string

$parsed_json = json_decode($result); 

$parsed_data->stats; //this returns


$low_tide_time = $parsed_json->tide->tideSummary[8]->date->pretty;
echo $low_tide_time;



?>

原因很清楚。数组键(在这种情况下为[8])并非每天一致地分配给相同的潮汐数据类型(退潮)。所以今天[8]可能是与退潮时间相关的数组键,但是明天[8]将是分配给日出,月出等的数组键。

有没有办法在每个循环中使用a来获取退潮的时间?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果$ parsed_json-&gt;潮流&gt; tideSummary对象中有一些属于您所请求信息的内容(例如“标题:低潮”),您可以执行foreach循环并检查该值是否存在。

喜欢这个

foreach ($parsed_json->tide->tideSummary AS $tideSummary) {
if ($tideSummary->title == "Low Tide") {
      $LowTide = $tideSummary;
}
}

之后您可以访问Low Tide数据:

echo $LowTide->Date; 

PS:未经测试且没有关于您的JSON格式的信息,如果没有唯一的信息可以识别Low Tide它可能会变得棘手..

答案 1 :(得分:0)

我检查JSON格式,它应该有效:

foreach( $parsed_json->tide->tideSummary AS $tideSummary ) {
    if( $tideSummary->data->type == "Low Tide" ) {

        $low_tide_time = $tideSummary->date->pretty;
        echo $low_tide_time;

        // you can end of foreach
        break;
    }
}