通过SimpleXMLElement迭代以检索邮政编码值

时间:2012-05-06 06:28:00

标签: php xml geocoding

我正在尝试从Google Geocode v3 API XML Response中提取邮政编码。我遇到的困难是有时postal_code值包含在第6个address_element中,有时包含在第7个address_element中。以下是我正在使用的XML响应,在此示例响应中,您可以看到postal_code是address_component数组的第6个元素:

SimpleXMLElement Object
(
[status] => OK
[result] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [type] => street_address
                [formatted_address] => 177 Church St, Toronto, ON M5C 2G5, Canada
                [address_component] => Array
                    (
                        [0] => SimpleXMLElement Object
                            (
                                [long_name] => 177
                                [short_name] => 177
                                [type] => street_number
                            )

                        [1] => SimpleXMLElement Object
                            (
                                [long_name] => Church St
                                [short_name] => Church St
                                [type] => route
                            )

                        [2] => SimpleXMLElement Object
                            (
                                [long_name] => Toronto
                                [short_name] => Toronto
                                [type] => Array
                                    (
                                        [0] => locality
                                        [1] => political
                                    )

                            )

                        [3] => SimpleXMLElement Object
                            (
                                [long_name] => Toronto
                                [short_name] => Toronto
                                [type] => Array
                                    (
                                        [0] => administrative_area_level_2
                                        [1] => political
                                    )

                            )

                        [4] => SimpleXMLElement Object
                            (
                                [long_name] => Ontario
                                [short_name] => ON
                                [type] => Array
                                    (
                                        [0] => administrative_area_level_1
                                        [1] => political
                                    )

                            )

                        [5] => SimpleXMLElement Object
                            (
                                [long_name] => Canada
                                [short_name] => CA
                                [type] => Array
                                    (
                                        [0] => country
                                        [1] => political
                                    )

                            )

                        [6] => SimpleXMLElement Object
                            (
                                [long_name] => M5C 2G5
                                [short_name] => M5C 2G5
                                [type] => postal_code
                            )

                    )

                [geometry] => SimpleXMLElement Object
                    (
                        [location] => SimpleXMLElement Object
                            (
                                [lat] => 43.6547363
                                [lng] => -79.3763746
                            )

                        [location_type] => RANGE_INTERPOLATED
                        [viewport] => SimpleXMLElement Object
                            (
                                [southwest] => SimpleXMLElement Object
                                    (
                                        [lat] => 43.6533849
                                        [lng] => -79.3777345
                                    )

                                [northeast] => SimpleXMLElement Object
                                    (
                                        [lat] => 43.6560829
                                        [lng] => -79.3750365
                                    )

                            )

                        [bounds] => SimpleXMLElement Object
                            (
                                [southwest] => SimpleXMLElement Object
                                    (
                                        [lat] => 43.6547315
                                        [lng] => -79.3763964
                                    )

                                [northeast] => SimpleXMLElement Object
                                    (
                                        [lat] => 43.6547363
                                        [lng] => -79.3763746
                                    )

                            )

                    )

            )

1 个答案:

答案 0 :(得分:0)

我没试过这个,但我认为它应该有效。

$address = $array->result[0]->address_component;
$postal_code = '';
foreach($address as $adr){
    if($adr->type == 'postal_code'){
        $postal_code = $adr->long_name;
    }
}