首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌地理代码。解析JSON问题

谷歌地理代码。解析JSON问题
EN

Stack Overflow用户
提问于 2012-10-05 22:08:19
回答 4查看 2.8K关注 0票数 3

我想从他们的邮政编码(加拿大/美国)的google地理代码中得到一个用户城市,州/省,国家。我以JSON:https://developers.google.com/maps/documentation/geocoding/#JSON的形式检索数据

问题是,“address_components”的数量/顺序并不总是相同。我使用的就像:$geocodedinfo['results'][0]['address_components'][3]['short_name'];,但我很快意识到,这并不总是省/州,因为有时谷歌会在'address_components‘下添加一个额外的元素。

是否有一种方法可以仅根据我需要的具体情况(即:城市、州/省、国家)来分析结果?

编辑--当我得到JSON时,实际上是对它进行解码

代码语言:javascript
复制
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
)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-05 22:34:00

你得把结果循环起来。

大多数相关的PHP函数都不支持多维数组,而且不管怎么说,这些函数都是循环的。

你可能会想要这样的东西:

代码语言:javascript
复制
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"];
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-10-05 22:35:29

看看这个,http://php.net/manual/en/control-structures.foreach.php --它是用于遍历数组的,您可以这样做,

代码语言:javascript
复制
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']; 
    } 
}

像这样的东西应该能起作用

票数 0
EN

Stack Overflow用户

发布于 2012-10-05 22:39:20

您可以通过一个foreach循环运行结果,并获取您要查找的数据。

我对谷歌类型的含义进行了最好的猜测,我可能会对那些内容置之不理。

代码语言:javascript
复制
$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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12754686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档