使用Google地图解码PHP中的API响应

时间:2016-10-25 13:39:18

标签: php json api google-maps

我正努力从“administrative_area_level_2”类型中获取“亚当斯县” 从这个api回应 http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false

我只需要根据纬度和经度输出县。

$query = @unserialize(file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false'));
echo 'Hello visitor from '.$query["response"];

这就是我现在所拥有的。谢谢。

2 个答案:

答案 0 :(得分:2)

您需要使用递归搜索并跟踪结果数组中之前找到的项目。

$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false';
$query = @json_decode(file_get_contents($url),true);


$address_components = $query['results'][0]['address_components'];

array_walk_recursive( $address_components,
                  function($item, $key) use(&$prev_item, &$stop){ 
                        if($item == 'administrative_area_level_2'){ 
                            $stop = true;
                        }
                        else {
                            if(!$stop)
                                $prev_item = $item; 
                        }
                  });

var_dump($prev_item);

答案 1 :(得分:0)

使用json_decode代替unserialize,因为回复是JSON格式。

然后只需循环或循环遍历项目,例如:

$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false'; $response = json_decode(file_get_contents($url), true);
if (empty($response['results'])) {
  // handle error
}

$long_name = null;

foreach ($response['results'] as $r) {
  if (empty($r['address_components']) || empty($r['types']))
    continue;


  if (array_search('administrative_area_level_2', $r['types']) === false)
    continue;

  foreach ($r['address_components'] as $ac) {
    if (array_search('administrative_area_level_2', $ac['types']) !== false) {
      $long_name = $ac['long_name'];
      break;
    }
  }
}

echo $long_name;

输出

Adams County