2014-10-30 38 views
1

我想知道是否有人可以用我有的代碼來幫助我。PHP - 從Google Maps API返回值

我有一個函數,如下所示:

function getAddressComponent($lat, $lng, $field) { 

    $returnValue = '-'; 
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($lat).','.trim($lng).'&sensor=false'; 
    $data = @file_get_contents($url); 
    $json = json_decode($data, TRUE); 

    if (isset($json['results'])) { 

     foreach($json['results'] as $result) { 

      foreach ($result['address_components'] as $address_component) { 

       $types = $address_component['types']; 
       if (in_array($field, $types) && sizeof($types) == 1) { 

        $returnValue = $address_component['short_name']; 

       } 
      } 
     } 
    } 

    return $returnValue; 

} 

我這樣調用該函數:

$returnAddress = $this->getAddressComponent(-34.872693, 138.490391, 'administrative_area_level_1'); 

如果我跑了administrative_area_level_1類型的函數,它沒有返回,但如果我使用$ url並在url中輸入lat和lng,它返回該類型的結果...數組看起來像這樣。

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "22", 
       "short_name" : "22", 
       "types" : [ "street_number" ] 
      }, 
      { 
       "long_name" : "Blue-Sails Court", 
       "short_name" : "Blue-Sails Ct", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "West Lakes", 
       "short_name" : "West Lakes", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "South Australia", 
       "short_name" : "SA", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Australia", 
       "short_name" : "AU", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "5021", 
       "short_name" : "5021", 
       "types" : [ "postal_code" ] 
      } 
     ], 

它還爲當地和國家返回'-'

我希望它返回一個'-'如果它不存在,但在這種情況下,它確實存在,它做我的頭。

任何幫助將不勝感激。

乾杯,

回答

3

的最大問題是內部的條件,如果:

"types" : [ "administrative_area_level_1", "political" ] 

sizeof/count大於零,則:

正如你可以在此JSON您提供看包含2.

所以當您使用條件:

if (in_array($field, $types) && sizeof($types) == 1) { // this fails 
// sizeof is not equal to 1 

所以基本上,在$returnValue裏面沒有賦值,因此它只是返回初始值-

要麼你只是改變它> 0或只是刪除它。

+0

美麗...這已經完成了...非常感謝! – BigJobbies 2014-10-30 04:32:39

+0

@BigJobbies確定男人很高興這有幫助 – Ghost 2014-10-30 04:33:18