0

我有一个奇怪的问题。我的条件不起作用:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://maps.googleapis.com/maps/api/geocode/json?    address='.urlencode($address).'&sensor=true');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);

if($result !== null) {
    $result = @json_decode($result, true);
    $result = @$result['results'][0]['address_components'];

    foreach($result as $key => $value) {
        if($value['types'][0] == 'administrative_area_level_2')
            return $value['long_name'];
    }
} else {
    throw new Exception('unable to look up the county');
}

我试过了

if($result)
if($result != null)
if($result != '')
if(!empty($result))
if(isset($result))

没有一个工作,脚本总是在块内,但 $result 的值为 null,我可以通过 xdebug 看到它。为什么会这样?

编辑:这是一个截图 截屏

这是 var_dump 显示的内容:

字符串'{“结果”:[],“状态”:“ZERO_RESULTS”}'(长度=52)

这修复了它:

        $result = @json_decode($result, true);

    if(!empty($result['results'])) {
4

4 回答 4

1

你有没有研究过这个功能is_null()

if(!is_null($result)) { ... }

文档

于 2013-01-12T06:44:12.987 回答
1

尝试添加一个

var_dump($result);
die;

在 curl 响应之后,为您知道应该为 null 的人执行此操作,然后他们检查结果是什么?它可能永远不会返回 null。请记住,值“”不是 NULL 值,而是“”值。

于 2013-01-12T06:42:47.507 回答
0

试试这个..可能是因为空格..echo strlen($result);在你的 curl_exec 之后也会帮助你检查结果是否为空。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://maps.googleapis.com/maps/api/geocode/json?         address='.urlencode($address).'&sensor=true');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);

if(trim($result)!='') {
 $result = @json_decode($result, true);
 $result = @$result['results'][0]['address_components'];
 foreach($result as $key => $value) {
    if($value['types'][0] == 'administrative_area_level_2')
        return $value['long_name'];
 }
} else {
throw new Exception('unable to look up the county');
}
于 2013-01-12T06:44:03.910 回答
0

我粘贴了您的代码并使用地址运行它。 $result不是 json 而是 html,因为 url 无效(404)。 因为无法解码字符串而json_decode返回。null

至少有两个建议的修改:

1 - 在 url 中删除和之间的空格...json?2 address=... - 使用json_last_error和/或检查返回值json_decode以查看 json 是否被正确解码。

http://php.net/manual/en/function.json-last-error.php

于 2013-01-12T06:58:12.383 回答