【发布时间】:2012-10-05 22:08:19
【问题描述】:
我想从他们的邮政/邮政编码(加拿大/美国)的谷歌地理编码中获取用户的城市、州/省、国家/地区。我以 JSON 格式检索数据:https://developers.google.com/maps/documentation/geocoding/#JSON
问题在于“address_components”的数量/顺序并不总是相同。我正在使用就像:$geocodedinfo['results'][0]['address_components'][3]['short_name'];
但我很快意识到这并不总是省/州,因为有时谷歌会在“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
)
【问题讨论】:
-
我使用 XML 而不是 JSON,但我必须遍历直到找到包含所需数据的那个。
-
我遇到了同样的问题,但在我的情况下,我需要大部分 address_components 所以我使用了 foreach() 来获得我想要的东西,而忘记了其余的。
-
@ayeshk 是否有可能遍历数组并仅获取 ['long_name'] 值 WHERE ['types']['0'] == 'country' 是不是?我以前从未这样做过。