私は機能を持っていますgetDistance()
。findDistance()
while ループ内の関数は、座標 (緯度-経度) を使用して 2 人のユーザー間の距離を計算し、$djson
その距離をメートル単位で var に返します。$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);
}
?>