1

ID、名前、タイプ、緯度、経度、距離を含むレコードセットを返すphp Mysqlクエリがあります

結果をjsonとしてエンコードするソリューションを検索しましたが、すべての例は、配列が全体として扱われていることを示しています。

$json = array(); 
if(mysql_num_rows($result)){ 
    while($row=mysql_fetch_row($result)){ 
        $json['markers'][]=$row; 
    } 
} 

echo json_encode($json);

これは正常に機能し、次の json を生成します。

{"markers":[
["2110","AP","Nans Sous Sainte Anne","46.976810","5.998910","1.60316506124051","0","0","0"],
["3484","AC","Salins Les Bains","46.946568","5.878649","6.8092722205639","0","0","0"],     ["2136","AC","Levier","46.959862","6.132840","6.8490368219444","0","1","0"],
["3472","APN","Salins Les Bains","46.936852","5.876290","7.28462233818928","0","0","0"],["3466","ASN","Salins Les Bains","46.932541","5.878990","7.36798013180542","0","2","0"],["2158","FP","Domaine d'Esprits","47.035751","5.824800","8.6152043630634","0","0","0"]]}

しかし、私がやりたいことは、各行をループし、関数で緯度と経度を使用して、次の関数を使用して方位を取得することです。$center_lat と $center_lng は、検索センターとして URL で渡されます。

$bearing=getCompassDirection(getBearing($center_lat, $center_lng, $row['Latitude'], $row['Longitude']));

関数「getCompassDirection」は有効で機能しますが、my_sql の結果をループして各行に関数を適用するにはどうすればよいですか?

4

2 に答える 2

1

さて、ここにあなたのコードがあります:

$json = array(); 
if(mysql_num_rows($result)){ 
    while($row=mysql_fetch_row($result)){ 
        $json['markers'][]=$row; 
    } 
} 

Every$row数値インデックス配列です。現在のデータからわかる限り、緯度はインデックス3のアイテムであり、経度はインデックス4のアイテムです(またはその逆)。したがって、コードを次のように変更できます。

$json = array(); 
if(mysql_num_rows($result)){ 
    while($row=mysql_fetch_row($result)){ 
        $row[] = getCompassDirection(getBearing($center_lat, $center_lng, $row[3], $row[4]));
        $json['markers'][]=$row; 
    } 
} 

または、代わりに使用できますmysql_fetch_assoc。この場合、結果の json は異なる構造になります。

$json = array(); 
if(mysql_num_rows($result)){ 
    while($row=mysql_fetch_assoc($result)){ 
        // check out keys names for lattitude and longtitude first
        $row['bearing'] = getCompassDirection(getBearing($center_lat, $center_lng, $row['lattitude'], $row['longtitude']));  
        $json['markers'][]=$row; 
    } 
} 

そして最後に、mysql_関数の使用をやめてください。それらは時代遅れで非推奨になっているからです。

于 2013-07-24T17:50:09.917 に答える