2015-03-16 2 views
0

Я извлекаю некоторые данные из базы данных MySQL, которая представляет местоположение. Он включает в себя широту и долготу местоположения.Сортировка результатов базы данных по двойному столбцу в PHP

На клиенте я использую геолокацию HTML, чтобы получить широту и долготу пользователя. Эти значения передаются в PHP-скрипт, который извлекает данные в форме скрытого поля формы.

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

Мне нужно отсортировать данные, которые отображаются на расстоянии. Я попробовал этот код

// First I loop over the results 
foreach($data as $venue) 
{ 
    $venue['distance'] = calculateDistance(users_lat, users_long, 
              $venue['lat'], $venue['long']); 
} 

Тогда я стараюсь использовать array_multisort сортировать по расстоянию колонки

array_multisort($data['distance'], SORT_ASC, SORT_NUMERIC); 

Я получаю это предупреждение:

Warning: array_multisort(): Argument #1 is expected to be an array or a sort flag 

уага дампа (первые 3 результатов)

["Distance"]=> float(1.5) 
["Distance"]=> float(2) 
["Distance"]=> float(1.7) 

Я нахожусь до получения предупреждения.

+0

вы можете 'var_dump на $ data' и показать нам результаты? –

+0

var_dump показывает расстояние как пустое, поэтому я предполагаю, что данные не обновляются – andrewb

+0

вот и все! что причина вашего 'array_multisort()' не работает –

ответ

0

Похоже, проблема с вашими данными внутри $ данных не петля:

$aData[ 'distance' ][] = 2344234; 
$aData[ 'distance' ][] = 54345; 
$aData[ 'distance' ][] = 364646; 
$aData[ 'distance' ][] = 5477474457; 
$aData[ 'distance' ][] = 34; 
$aData[ 'distance' ][] = 1; 
$aData[ 'distance' ][] = 34556; 

var_dump($aData); 
array_multisort($aData['distance'], SORT_ASC, SORT_NUMERIC); 

var_dump($aData); 
+0

Результаты расчетаDistance вернутся в два раза, будет ли это работать? – andrewb

+0

Появляется, когда я использую значения как (double) $ aData ['distance'] [] = (double) 2344234; Я бы добавил некоторые проверки, если (! Empty ($ aData)) {... –

0

Превышено избавлении значения $venu пытаются таким образом; $ result = array();

foreach($data as $venue) 
{ 
    $result['distance'][] = calculateDistance(users_lat, users_long, 
              $venue['lat'], $venue['long']); 
} 

затем:

array_multisort($result['distance'][], SORT_ASC, SORT_NUMERIC); 
Смежные вопросы