0

私は機能を持っています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);
}
?>
4

1 に答える 1

0

私が通常行うことは、複雑なものを書くときは、関数に入らずに機能するようにしてから、関数に分解することです。その方が混乱が少なく、問題のトラブルシューティングが簡単です。

他の関数を投稿しておらず、if ステートメントがその関数の出力に依存しているため、何をしているのかわかりにくいです。

$name と $user_old['name'] を使用しているのは、この行である可能性があります。

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

お互いに合わせたいと思います。$name = $user_old['name'] の場合のように追加し、そうでない場合は別のことを行います。

于 2013-01-27T01:34:36.140 に答える