2017-01-02 36 views
1

這是一個基本的PHP問題,我可能在沒有明天上午的時間破解它,但今天它已經有looong一天,所以...遞減輪數和檢查結果

我有一個返回的功能使用Google Maps API的鄰域名稱。我注意到鄰里名稱正在改變,基於lon lat中的小數點。當它不能返回鄰居名稱時,它會返回城市名稱。

我想要做的是以12個十進制數字開始,並將返回的結果與城市名稱進行比較,如果相同,則繼續遞減,直到返回的結果不同。

下面是我得到了什麼:

$rnd = 12; 

function get_hood($lat, $lon, $rnd) { 

    $get_API = "http://maps.googleapis.com/maps/api/geocode/json?latlng="; 
    $get_API .= round($lat,$rnd).","; 
    $get_API .= round($lon,$rnd); 

    $jsonfile = file_get_contents($get_API.'&sensor=false'); 
    $jsonarray = json_decode($jsonfile); 

    if (isset($jsonarray->results[1]->address_components[1]->long_name)) { 
     return($jsonarray->results[1]->address_components[1]->long_name); 
    } 
} 

for($i=1; $i<=$rnd; $i--) { 
    if ($b->busCity == get_hood($b->lat, $b->lon, $rnd)) { 
     echo get_hood($b->lat, $b->lon, $rnd); 
     break; 
    } else { 
     echo get_hood($b->lat, $b->lon, $rnd); 
    } 
} 

我覺得我在圈子我要去和需要一個重新審視這一點。

感謝。

+1

我覺得你的循環無限!你應該把'$ i - '改成'$ i ++' –

+0

@AhmadMobaraki我認爲減量是正確的 - 根據需求的描述(_start有12個十進制數字...),開始和結束條件是錯誤的。 decrementing_) –

回答

0

我看到for循環出現了幾個問題。首先,您需要從$rnd開始循環,並在01處停止。其次,你似乎沒有使用循環變量,但每次都使用相同的變量$rnd。最後,你使用$b變量,但它沒有在任何地方定義(儘管我認爲它可能在你包含的短片段之外定義)。

如果我理解正確,你想要得到什麼,那麼這段代碼應該讓你有(請注意,我不得不定義$b測試代碼)

$b = (object)[ 
    'lat' => 51.123456789012, 
    'lon' => 0.123456789012, 
    'busCity' => 'Withyham' 
]; 

for($i = $rnd; $i >= 0; $i--) { 
    $newCity = get_hood($b->lat, $b->lon, $i); 
    echo "$i => $newCity\n"; 
    if($b->busCity != $newCity) { 
     break; 
    } 
}