0

我有这个功能getDistance()。while 循环内的函数,通过使用坐标(纬度-经度)计算 2 个用户之间的距离,并将距离以米为单位findDistance()返回给 var 。是用户第一次提交的字符串,是从数据库中调用的字符串。我希望能够从我的数据库中保存所有用户的名称,其中的条件为真,关于提交数据的新用户与数据库内旧用户的距离之和。问题是保存了从数据库调用的名字,并且循环继续进行多次,甚至没有考虑限制。例如,如果调用的名字$djson$distance$user_old["distance"]$query$matched_namesif()$matched_namesif()$user是“迈克”,$user有 5 行,那么输出将是:Mike,Mike,Mike,Mike,Mike

我想我在内部工作的方式上犯了一些错误,而..

<?php
public function getDistance($uuid, $name, $distance, $latstart, $lonstart, $latend, $lonend, $gcm_regId) {

    $query = sprintf("SELECT uid, gcm_regid, name, distance,latstart, lonstart, latend, lonend  FROM user_demand WHERE latstart='%s' AND lonstart='%s'",
    mysql_real_escape_string($latstart),
    mysql_real_escape_string($lonstart));
    $user = mysql_query($query);

    $no_of_rows = mysql_num_rows($user);
    $user_old = mysql_fetch_assoc($user);

    while( $user_old = mysql_fetch_assoc($user)) {
        $djson = $this->findDistance($latend,$lonend,$user_old["latend"],$user_old["lonend"] );
        if ($user_old["distance"] + $distance >= $djson) {
            $match = $this ->df->addUserMatch($user_old['gcm_regid'],$user_old['name'],$gcm_regId,$name);
            $matched_names = array_fill(0,$no_of_rows,$user_old['name']);   
            $matched_gcmz = array_fill(0,$no_of_rows,$user_old['gcm_regid']); 
        }
    }

    $registatoin_ids = array($gcm_regId);

    $message = array("names" =>$matched_names,"gcm" => $matched_gcmz);
    $result = $this ->gcm->send_notification($registatoin_ids, $message);
}
?>
4

1 回答 1

0

我通常做的是,当我要写一些复杂的东西时,就是让它在没有函数的情况下工作,然后把它分解成函数。以这种方式解决问题更容易混淆和更容易。

很难说出它在做什么,因为您没有发布其他函数,并且 if 语句依赖于该函数的输出。

顺便说一句,这可能是您使用 $name 和 $user_old['name']

$match = $this ->df->addUserMatch($user_old['gcm_regid'],$user_old['name'],$gcm_regId,$name);

我想你会希望它相互匹配。就像 if $name = $user_old['name'] 然后添加它,如果没有,做其他事情。

于 2013-01-27T01:34:36.140 回答