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个结果。这可能吗?非常感谢你,你是一个很好的人。 –