Таким образом, результирующий массив должен выглядеть примерно так:
'name' => 'something',
'lat' => 'something',
'lng' => 'something',
'description' => 'something',
etc.
Используйте usort
для сортировки.
usort($array, 'sortByOption');
function sortByOption($a, $b) {
$distA = dist($a['homelat'], $a['homelong'], $a['lat'], $a['long']);
$distB = dist($b['homelat'], $b['homelong'], $b['lat'], $b['long']);
return strcmp($distA, $distB);
}
function dist($x1, $y1, $x2, $y2) {
return pow($x2 - $x1, 2) + pow($y2 - $y1, 2);
}
РЕДАКТИРОВАТЬ: Извините, 100% не прочитал ваш вопрос. Пересмотрено для решения (хотя и не очень). Вы должны рассчитать расстояние в самом массиве. И чтобы сэкономить время, не делайте квадратный корень.
РЕДАКТИРОВАТЬ 2: Окончательный результат.
while ($aaa = mysql_fetch_assoc($wynik)) {
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($points, array('name'=>$row['name'],
'lat'=>$row['lat'],
'lng'=>$row['lng'],
'description'=>$row['description'],
'eventType'=>$row['eventType'],
'date'=>$row['date'],
'isotime'=>date('c', ($row['timestamp'])),
'homelat'=>$aaa['homelat'],
'homelon'=>$aaa['homelon'],
'dist'=>dist($aaa['homelat'], $aaa['homelon'], $row['lat'], $row['lng'])
));
}
}
usort($points, 'sortByDist'); // This sorts the points!
echo json_encode(array("Locations"=>$points));
function sortByDist($a, $b) {
return strcmp($a['dist'], $b['dist']);
}
function dist($x1, $y1, $x2, $y2) {
return pow($x2 - $x1, 2) + pow($y2 - $y1, 2);
}