0

我在从 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] 将是分配给日出、月出等的数组键。

有没有办法使用每个循环来抓住退潮的时间?

谢谢!

4

2 回答 2

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;
    }
}
于 2013-05-22T22:37:41.560 回答
0

如果 $parsed_json->tide->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,它可能会变得很棘手..

于 2013-05-22T22:27:26.467 回答