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

を追加してみてください

var_dump($result);
die;

カール応答の直後に、null であることがわかっているものに対してそれを行い、結果が何であるかを調べますか? null を返すことはないかもしれません。値 "" は NULL 値ではなく、"" 値であることを忘れないでください。

于 2013-01-12T06:42:47.507 に答える
1

関数を調べましたis_null()か?

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

ドキュメンテーション

于 2013-01-12T06:44:12.987 に答える
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

あなたのコードを貼り付けて、アドレスを指定して実行しました。 $resultURLが無効(404)であるため、jsonではなくhtmlでした。 文字列をデコードできなかったため、json_decode返されました。null

少なくとも 2 つの修正案:

...json?1 - URL でとの間のスペースを削除します。 address=... 2 -json_last_errorの戻り値を使用および/またはチェックjson_decodeして、json が適切にデコードされたかどうかを確認します。

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

于 2013-01-12T06:58:12.383 に答える