我有函数getDistance()
。 while循环中的函数findDistance()
通过使用坐标(纬度 - 经度)计算2个用户之间的距离,并以米为单位返回var $djson
。 $distance
是用户第一次提交的字符串,$user_old["distance"]
是从$query
中的数据库调用的字符串。我希望能够在$matched_names
中保存我的数据库中用户的所有名称,if()
内的条件为真,关于提交他的新用户的距离总和数据和数据库中的旧数据。问题是$matched_names
保存了从数据库调用的第一个名称,并且循环继续多次,甚至没有考虑if()
限制。例如,如果在$user
中调用的名字是“Mike”,而$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);
}
?>
答案 0 :(得分:0)
我通常所做的是,当我要写一些复杂的东西时,就是让它在没有功能的情况下工作,然后将其分解为函数。 通过这种方式解决问题不那么容易混淆和容易。
由于你没有发布你的其他函数而且if语句依赖于该函数的输出,所以很难分辨它在做什么。
另一方面,它可能是您使用$ name和$ user_old ['name']的这一行
$ match = $ this - &gt; df-&gt; addUserMatch($ user_old ['gcm_regid'],$ user_old ['name'],$ gcm_regId,$ name);
我想你会希望它相互匹配。就像$ name = $ user_old ['name']然后添加它,如果没有,做其他事情。