Google Maps APIから返された JSON があり、州、郡、地域、および国のみを取得したいと考えています。
次の簡単なコードを使用して、PHP 経由でこの json を取得しています。
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=the+address&sensor=true&key=my+api+key';
// make the HTTP request
$data = @file_get_contents($url);
$jsondata = json_decode($data,true);
$data をエコーすると、次のようになります。
{
"results" : [
{
"address_components" : [
{
"long_name" : "9",
"short_name" : "9",
"types" : [ "street_number" ]
},
{
"long_name" : "Hanover Street",
"short_name" : "Hanover St",
"types" : [ "route" ]
},
{
"long_name" : "Edinburgh",
"short_name" : "Edinburgh",
"types" : [ "locality", "political" ]
},
{
"long_name" : "City of Edinburgh",
"short_name" : "City of Edinburgh",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Scotland",
"short_name" : "Scotland",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United Kingdom",
"short_name" : "GB",
"types" : [ "country", "political" ]
},
{
"long_name" : "EH2",
"short_name" : "EH2",
"types" : [ "postal_code_prefix", "postal_code" ]
},
{
"long_name" : "Edinburgh",
"short_name" : "Edinburgh",
"types" : [ "postal_town" ]
}
]
}
],
"status" : "OK"
}
私がアクセスしたいのは、多次元配列 *address_components* の内部です。Google からの各 JSON 応答は、毎回同じ数の配列を返すと想定していたので、単純な数値インデックスを使用して必要なデータにアクセスしています。 .
$jsondata['results'][0]['address_components'][4]['long_name']
つまり、常に「administrative_area_level_2」の long_name 値が得られると思っていましたが、この場合は「City of Edinburgh」でした。しかし、私は間違っていました。
住所コンポーネントが多い場合と少ない場合があります。つまり、この配列を検索してインデックスを取得する方法が必要です。
それはどのように行われますか?同様に、「administrative_area_level_1」タイプの住所コンポーネントを検索し、その「long_name」値を返すにはどうすればよいですか?