我在从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来获取退潮的时间?
谢谢!
答案 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;
}
}