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] は日の出、月の出などに割り当てられた配列キーになります。

for each ループを使用して干潮時間を取得する方法はありますか?

ありがとう!

4

2 に答える 2

0

$parsed_json->tide->tideSummary オブジェクトに、要求された情報 ("Title: Low Tide" など) に固有のものがある場合は、foreach ループを実行して、その値が存在するかどうかを確認できます。

このような

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

その後、次のように干潮データにアクセスできます。

echo $LowTide->Date; 

PS: テストされておらず、JSON 形式に関する情報はありません。Low Tide を識別するための固有の情報がない場合、扱いが難しくなる可能性があります..

于 2013-05-22T22:27:26.467 に答える
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 に答える