2015-10-23 39 views
0

我使用Google Geocoding APIPHP(cURL)来获取JSON数组。 这一切都工作正常。 问题是不是每个输出都是一样的。使用Google的地理编码API从JSON数组中获取正确的值

实施例:

我有两个地址:

  1. 坝1,阿姆斯特丹
  2. 的Kurfürstendamm1,柏林

对于阿姆斯特丹解决$array['results'][0]['address_components']的计数,并在一个用于柏林7.

JSON输出:

阿姆斯特丹:

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "1", 
       "short_name" : "1", 
       "types" : [ "street_number" ] 
      }, 
      { 
       "long_name" : "Dam", 
       "short_name" : "Dam", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Centrum", 
       "short_name" : "Centrum", 
       "types" : [ "sublocality_level_1", "sublocality", "political" ] 
      }, 
      { 
       "long_name" : "Amsterdam", 
       "short_name" : "Amsterdam", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Amsterdam", 
       "short_name" : "Amsterdam", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "Noord-Holland", 
       "short_name" : "NH", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Nederland", 
       "short_name" : "NL", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "1012 JS", 
       "short_name" : "1012 JS", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "Dam 1, 1012 JS Amsterdam, Nederland", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 52.3740904, 
        "lng" : 4.8951464 
       }, 
       "southwest" : { 
        "lat" : 52.37303319999999, 
        "lng" : 4.893589 
       } 
      }, 
      "location" : { 
       "lat" : 52.3735618, 
       "lng" : 4.8943677 
      }, 
      "location_type" : "ROOFTOP", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 52.37491078029149, 
        "lng" : 4.895716680291502 
       }, 
       "southwest" : { 
        "lat" : 52.3722128197085, 
        "lng" : 4.893018719708498 
       } 
      } 
     }, 
     "place_id" : "ChIJ46bYaccJxkcRR1k-7Pl25Kg", 
     "types" : [ "premise" ] 
     } 
    ], 
    "status" : "OK" 
} 

柏林:

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "1", 
       "short_name" : "1", 
       "types" : [ "street_number" ] 
      }, 
      { 
       "long_name" : "Kurfürstendamm", 
       "short_name" : "Kurfürstendamm", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Bezirk Charlottenburg-Wilmersdorf", 
       "short_name" : "Bezirk Charlottenburg-Wilmersdorf", 
       "types" : [ "sublocality_level_1", "sublocality", "political" ] 
      }, 
      { 
       "long_name" : "Berlin", 
       "short_name" : "Berlin", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Berlin", 
       "short_name" : "Berlin", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Duitsland", 
       "short_name" : "DE", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "10719", 
       "short_name" : "10719", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "Kurfürstendamm 1, 10719 Berlin, Duitsland", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 52.50440769999999, 
        "lng" : 13.3337799 
       }, 
       "southwest" : { 
        "lat" : 52.5043971, 
        "lng" : 13.3337737 
       } 
      }, 
      "location" : { 
       "lat" : 52.50440769999999, 
       "lng" : 13.3337737 
      }, 
      "location_type" : "RANGE_INTERPOLATED", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 52.50575138029149, 
        "lng" : 13.3351257802915 
       }, 
       "southwest" : { 
        "lat" : 52.5030534197085, 
        "lng" : 13.3324278197085 
       } 
      } 
     }, 
     "partial_match" : true, 
     "place_id" : "EixLdXJmw7xyc3RlbmRhbW0gMSwgMTA3MTkgQmVybGluLCBEZXV0c2NobGFuZA", 
     "types" : [ "street_address" ] 
     } 
    ], 
    "status" : "OK" 
} 

正如你所看到的国家和邮编指标是不同的(国家:6和5,邮递区号7和6)

当我想显示街道,对于这两个城市是这样的housenumber,邮编,城市和国家:

echo 'Street = '.$array['results'][0]['address_components'][1]['long_name'].'<br />'; 
echo 'Housenumber = '.$array['results'][0]['address_components'][0]['long_name'].'<br />'; 
echo 'Postalcode = '.$array['results'][0]['address_components'][7]['long_name'].'<br />'; 
echo 'City = '.$array['results'][0]['address_components'][3]['long_name'].'<br />'; 
echo 'Country = '.$array['results'][0]['address_components'][6]['long_name'].'<br />'; 

它显示下面的输出:

阿姆斯特丹:

Street = Dam 
Housenumber = 1 
Postalcode = 1012 JS 
City = Amsterdam 
Country = Netherlands 

柏林:

Street = Kurfürstendamm 
Housenumber = 1 

Notice: Undefined offset: 7 in .... on line .... 
Postalcode = 
City = Berlin 
Country = 10719 

所以问题是,我怎样才能得到阵列"long_name"

或者也许还有更好的方法?

回答

2

你可以尝试下面的代码下面的JSON效应初探与地址组件转换成数组作为键:

function convertAddress($json) 
{ 

    $data = json_decode($json); 

    $address = array(); 

    foreach($data['results']['address_components'] AS $_component){ 

     $key = array_values($_component['types']); 
     $address[$key[0]] = $_component; 

    } 

    return $address; 

} 

这对我的伟大工程与您的测试数据,然后你可以像这样访问数据:

$address = convertAddress($berlin_address); 
print $address['post_code']['long_name']; 

请注意,我只对JSON的address_components部分工作,其余的应该很容易进入工作方法虽然。

+0

太棒了!谢谢! – JK87

+0

无后顾之忧! – coder4show

相关问题