2014-10-30 5 views
1

Мне было интересно, может ли кто-нибудь помочь мне с небольшим количеством кода, который у меня есть.PHP - Возвращаемые значения из API Карт Google

У меня есть функция, которая заключается в следующем:

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 и вхожу в lat и lng в url, он возвращает результаты для этого типа ... Массив выглядит так.

{ 
    "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

Самая большая проблема является состояние внутри, если:

Как вы можете видеть в этом формате JSON, что вы предоставили:

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

Его sizeof/count больше нуля, то содержит 2.

Поэтому, когда вы используете условие:

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

Таким образом, в $returnValue значения не назначаются, поэтому он просто возвращает вашу инициализацию -.

Либо вы просто измените его на > 0 или просто удалите его.

+0

Красивая ... Это сделало трюк ... Большое вам спасибо! – BigJobbies

+0

@BigJobbies уверен, что человек рад, что это помогло – Ghost

Смежные вопросы