2017-01-02 44 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; 
    } 
}