我想从他们的邮政/邮政编码(加拿大/美国)的谷歌地理编码获得用户城市,州/省,国家/地区。我将数据检索为JSON:https://developers.google.com/maps/documentation/geocoding/#JSON
问题在于'address_components'的数量/顺序并不总是相同。我正在使用:$geocodedinfo['results'][0]['address_components'][3]['short_name'];
但我很快意识到,这并不总是省/州,因为有时google会在'address_components'下添加一个额外的元素。
有没有办法根据我需要的细节(即:城市,州/省,国家/地区)解析结果?
编辑我收到JSON后实际解码json_decode($result, true)
Array
(
[results] => Array
(
[0] => Array
(
[address_components] => Array
(
[0] => Array
(
[long_name] => V2X 2P6
[short_name] => V2X 2P6
[types] => Array
(
[0] => postal_code
)
)
[1] => Array
(
[long_name] => Maple Ridge
[short_name] => Maple Ridge
[types] => Array
(
[0] => locality
[1] => political
)
)
[2] => Array
(
[long_name] => Maple Ridge
[short_name] => Maple Ridge
[types] => Array
(
[0] => administrative_area_level_3
[1] => political
)
)
[3] => Array
(
[long_name] => Greater Vancouver Regional District
[short_name] => Greater Vancouver Regional District
[types] => Array
(
[0] => administrative_area_level_2
[1] => political
)
)
[4] => Array
(
[long_name] => British Columbia
[short_name] => BC
[types] => Array
(
[0] => administrative_area_level_1
[1] => political
)
)
[5] => Array
(
[long_name] => Canada
[short_name] => CA
[types] => Array
(
[0] => country
[1] => political
)
)
)
[formatted_address] => Maple Ridge, BC V2X 2P6, Canada
[geometry] => Array
(
[bounds] => Array
(
[northeast] => Array
(
[lat] => 49.2214351
[lng] => -122.6577849
)
[southwest] => Array
(
[lat] => 49.219268
[lng] => -122.663613
)
)
[location] => Array
(
[lat] => 49.2202679
[lng] => -122.660587
)
[location_type] => APPROXIMATE
[viewport] => Array
(
[northeast] => Array
(
[lat] => 49.2217005303
[lng] => -122.6577849
)
[southwest] => Array
(
[lat] => 49.2190025697
[lng] => -122.663613
)
)
)
[types] => Array
(
[0] => postal_code
)
)
)
[status] => OK
)
答案 0 :(得分:4)
你将不得不循环结果。
大多数相关的PHP函数都不支持多维数组,无论如何都要支持多维数组。
你可能想要这样的东西:
foreach ($geocodedinfo["results"] as $result) {
foreach ($result["address_components"] as $address) {
// Repeat the following for each desired type
if (in_array("country", $address["types"])) {
$country = $address["long_name"];
}
}
}
答案 1 :(得分:0)
试着看看这个,http://php.net/manual/en/control-structures.foreach.php它是用于循环数组,你可以做类似的事情,
foreach ($result['results'][0]['address_components'] as $key => $val)
{
if (in_array('country', $result['results'][0]['address_components'][$key]['types'][0]))
{
echo $result['results'][0]['address_components'][$key]['long_name'];
}
}
这样的事情应该有效
答案 2 :(得分:0)
您可以通过foreach
循环运行结果,并获取您正在寻找的数据。
我正在对Google类型的含义进行最佳猜测,我可能会对此类型有所了解。
$translate = array(
'locality' => 'city',
'administrative_area_level_3' => 'area', // not sure what this one is
'administrative_area_level_2' => 'county', // regional district ?
'administrative_area_level_1' => 'state', // province
'country' => 'country',
'postal_code' => 'zip', // postal code
);
$address_components = array( );
foreach ($geocodedinfo['results'][0]['address_components'] as $component) {
$address_components[$translate[$component['type'][0]]] = $component['long_name'];
}
var_dump($address_components);
答案 3 :(得分:-1)
//解析json响应
$jsondata = json_decode($data,true);
$results = $jsondata['results'][0];
$addr =$results['formatted_address'];
这允许您访问长格式化地址
326 London Road,Newbury,Berkshire,West Berkshire RG14 2DA,UK