2016-12-12 9 views
0

У меня есть координаты моего местоположения, и я хочу отсортировать координаты моей базы данных от ближайшего к дальше от моего местоположения. Это мой код, чтобы принять и сохранить координаты:Как отсортировать массив координат по моему местоположению PHP

$myXCoor = 37.9730328; 
$myYCoor = 23.7533623; 
$xcoor = array(); 
$ycoor = array(); 
    $result = mysqli_query($con, "SELECT * FROM `base`.`table` ;"); 

     while($row = mysqli_fetch_array($result, MYSQLI_BOTH)) 
     { 

       $xcoor[] = $row['x']; 
       $ycoor[] = $row['y']; 

     } 

Я действительно не так, как я могу идти, если кто-то хочет больше деталей, пожалуйста, оставьте комментарий.

Заранее спасибо

+2

Возможный дубликат [MySQL Great Circle Расстояние (Формула Хаверсина)] (http://stackoverflow.com/questions/574691/mysql-great-circle-distance-haversine-formula) – cmorrissey

ответ

1

Вы можете сделать это в SQL, путем добавления последовательности:

$myXCoor = 37.9730328; 
$myYCoor = 23.7533623; 
$xcoor = array(); 
$ycoor = array(); 
$order = "order by pow((t.x - $myXCoor),2) + pow((t.y - $myYCoor),2);"; 
$result = mysqli_query($con,"SELECT * FROM `base`.`table` t $order"); 

Или вы можете использовать usort:

$result = mysqli_query($con, "SELECT * FROM `base`.`table` ;"); 
$result = mysqli_fetch_all($result, MYSQL_BOTH); 
usort($result, function($a,$b) use ($myXCoor,$myYCoor){ 
    return pow($a['x'] - $myXCoor, 2) + pow($a['y'] - $myYCoor, 2) 
     > pow($b['x'] - $myXCoor, 2) + pow($b['y'] - $myYCoor, 2) ? 1 : -1; 
});