0
升序有4份的代碼:PHP - json_encode顯示它通過元件從陣列
- 獲取電影院的位置從數據庫
- 獲取距離在KM用戶位置和電影院
- 之間添加距離進入陣列
- 顯示這一切在JSON
所以距離不是東西,是在數據庫中。
我只需要得到5個結果並按升序對它們進行排序,以便最近的位置將首先顯示。
代碼:
$result = mysqli_query($con,"query to get cinemaname,id,latitude,longitude,cinema logo");
$x = 1;
while(($rowm = mysqli_fetch_array($result)) && ($x <= 5))
{
$lat1 = $_GET['lat'];//users location
$lon1= $_GET['lon'];//users location
$lat2 = $rowm['latitude']; //location of cinema in database
$lon2 = $rowm['longitude']; //location of cinema in database
//calculating the distance by two locations
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = $miles * 1.609344;
$distance = substr($unit,0,4)." km";
$rowm['distance'] = $distance; //adding the distance into the array to show it in json
$asd[]= $rowm;
$x++; //loop to show it only 5 times
}
$alldata = array('items'=>$asd); //need to show first items to pass it to javascript
header('Content-Type: application/json; charset=utf-8');
echo json_encode($alldata);
}
?>
結果:
{"items":[
{"cinemaname":"Cinema name","logo":"upload/logo.png","latitude":"25.2326052","longitude":"55.40300690000004","distance":"29.7 km"},
{"cinemaname":"Cinema name 2","logo":"upload/logo2.png","latitude":"25.2226052","longitude":"55.10300690000004","distance":"19.7 km"},
{"cinemaname":"Cinema name 3","logo":"upload/logo3.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"6.7 km"},
{"cinemaname":"Cinema name 4","logo":"upload/logo4.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"4.7 km"},
{"cinemaname":"Cinema name 5","logo":"upload/logo5.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"5.7 km"}
]}
需要以這種方式顯示:
{"items":[
{"cinemaname":"Cinema name 4","logo":"upload/logo4.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"4.7 km"},
{"cinemaname":"Cinema name 5","logo":"upload/logo5.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"5.7 km"},
{"cinemaname":"Cinema name 3","logo":"upload/logo3.png","latitude":"25.2226052","longitude":"55.40200690000004","distance":"6.7 km"},
{"cinemaname":"Cinema name 2","logo":"upload/logo2.png","latitude":"25.2226052","longitude":"55.10300690000004","distance":"19.7 km"},
{"cinemaname":"Cinema name","logo":"upload/logo.png","latitude":"25.2326052","longitude":"55.40300690000004","distance":"29.7 km"}
]}
使最小距離將首先顯示。
謝謝回答,幾乎是正確的,但仍顯示數據點點例如不正確顯示1,2,4,3,5,6,8,7,9其中一些顯示不正確。 –
請嘗試更新的答案是鑄造問題。 –
真棒伊斯梅爾,運作良好,但現在有另一個問題,如果你可以幫我解決..目前它顯示隨機5個位置和距離。現在,我只需要得到3個結果。這可能嗎?非常感謝你,你是一個很好的人。 –