我想从他们的邮政编码(加拿大/美国)的google地理代码中得到一个用户城市,州/省,国家。我以JSON:https://developers.google.com/maps/documentation/geocoding/#JSON的形式检索数据
问题是,“address_components”的数量/顺序并不总是相同。我使用的就像:$geocodedinfo['results'][0]['address_components'][3]['short_name'];,但我很快意识到,这并不总是省/州,因为有时谷歌会在'address_components‘下添加一个额外的元素。
是否有一种方法可以仅根据我需要的具体情况(即:城市、州/省、国家)来分析结果?
编辑--当我得到JSON时,实际上是对它进行解码
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
)发布于 2012-10-05 22:34:00
你得把结果循环起来。
大多数相关的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"];
}
}
}发布于 2012-10-05 22:35:29
看看这个,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'];
}
}像这样的东西应该能起作用
发布于 2012-10-05 22:39:20
您可以通过一个foreach循环运行结果,并获取您要查找的数据。
我对谷歌类型的含义进行了最好的猜测,我可能会对那些内容置之不理。
$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);https://stackoverflow.com/questions/12754686
复制相似问题