我有一个奇怪的问题。我的条件不起作用:
$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显示的内容:
string'{“results”:[],“status”:“ZERO_RESULTS”}' (长度= 52)
这解决了它:
$result = @json_decode($result, true);
if(!empty($result['results'])) {
答案 0 :(得分:1)
尝试添加
var_dump($result);
die;
在curl响应之后,为你知道的那个做那个应该为null并且他们检查结果是什么?它可能永远不会返回null。 请记住,值“”不是NULL值,而是“”值。
答案 1 :(得分:1)
答案 2 :(得分:0)
试试这个......可能是因为空格..你的curl_exec之后echo strlen($result);
会帮助你检查结果是否为空。
$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');
}
答案 3 :(得分:0)
我粘贴你的代码并用地址运行它。
$result
不是json而是html,因为url无效(404)。
json_decode
返回null
,因为无法解码字符串。
至少有两个建议修改:
1 - 在网址中删除...json?
和address=...
之间的空格
2 - 使用json_last_error
和/或检查json_decode
的返回值,以查看json是否已正确解码。