2017-11-23 35 views
-1

私はapiからjsonの返信があり、いくつかのデータが必要です。jsonからのPHPオブジェクトへのアクセス

応答は次のようになります。

{ 
"user_id": null, 
"flight_info": { 
     "YU24268": { 
    "seat": { 
     "width": 45.72, 
     "pitch": 73.66 
    }, 
    "delay": { 
     "ontime_percent": 0.66666669, 
     "max": 53, 
     "mean": 37, 
     "min": 28 
    } 
    }, 
    "delay": { 
     "ontime_percent": 0.67741936, 
     "max": 305, 
     "mean": 33, 
     "min": 0 
    } 
    } 
}, 
"travelpayouts_api_request": true, 
"clean_marker": "75089", 
"currency": "usd", 
"internal": false, 
"airports": { 
    "ORY": { 
    "rates": "12", 
    "city_code": "PAR", 
    "country_code": "FR", 
    "country": "France", 
    "time_zone": "Europe/Paris", 
    "name": "Paris Orly Airport", 
    "city": "Paris" 
    }, 
    "SXF": { 
    "rates": "27", 
    "city_code": "BER", 
    "country_code": "DE", 
    "country": "Germany", 
    "time_zone": "Europe/Berlin", 
    "name": "Schonefeld Airport", 
    "city": "Berlin" 
    } 
} 

私は私が(IATAコードから)必要な空港を見つけるために、このコードを使用しますが、私は街を取得することはできません。

function find_city_from_IATA($my_value, $key1) 
{ 
    foreach ($key1->airports as $key=>$value) { 
     echo $key; 
     echo $my_value;    
      if ($key==$my_value) { 
       $city = json_decode($key1->airports,true); 
       // echo $key1->airlines['U2']->city; 
       $city = $city->city; 
       echo $city; 
       return $city; 
      } 
    } 
} 

空港のIATAに基づいて都市名を取得するにはどうすればよいですか? (iataは空港のオブジェクトが持つ3文字のコードキーです)。このような

+0

あなたはそれが既に復号化だ、 'json_decode'を使用する必要はありません。あなたは '$ value-> city'だけを必要とします。 – Phil

答えて

1

何か:

$airport_code = 'ORY'; 

// $my_irpost_string is your json string 
$data = json_decode($my_json_string, true); 
$city = $data['airports'][$airport_code]['city']; 

print($city); 

すでにコードを知っているあなたは、foreachのを必要としません。つまり、foreach +の比較は配列の値@codeだけです。

これはよく知られているアンチパターンです:https://softwareengineering.stackexchange.com/questions/348682/what-is-the-for-case-antipattern

+1

コレクション全体をループするよりもはるかに良いでしょう:) – Phil

+0

これは実際の生産コードで何回も見られます。:) –

関連する問題