在PHP中按双列对数据库结果进行排序

时间:2015-03-16 04:14:01

标签: php database sorting

我从表示位置的MySQL数据库中检索一些数据。它包括位置的纬度和经度。

在客户端,我使用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

var dump(前3个结果)

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

我仍然收到警告。

2 个答案:

答案 0 :(得分:0)

看起来问题与$ data中的数据有关,而不是循环:

$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 );

答案 1 :(得分: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);