微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-按从数组计算出的值对数组进行排序

我从阵列中的数据库中获得了用户的经纬度
我有我的经纬

现在,我要计算距离并使用该距离对数据库中的用户进行排序

$mylat = $_SESSION['lat'];
$mylng = $_SESSION['lng'];

$statement = $pdo->prepare("SELECT * FROM users");
$statement->execute();
$users = $statement->fetchAll();

foreach($users as $row){
    $dist = 0.0;
    $x1 = $mylng;
    $x2 = $row['lng'];
    $y1 = $mylat;
    $y2 = $row['lat'];

    $dist = acos(sin($x1=deg2rad($x1))*sin($x2=deg2rad($x2))+cos($x1)*cos($x2)*cos(deg2rad($y2) - deg2rad($y1)))*(6378.137);
    $distn = FLOOR ( ROUND($dist,1) * 2 ) / 2 ;
}

sort($distn);

foreach ($users as $row) { 

$dist = 0.0;
    $x1 = $mylng;
    $x2 = $row['lng'];
    $y1 = $mylat;
    $y2 = $row['lat'];

    $dist = acos(sin($x1=deg2rad($x1))*sin($x2=deg2rad($x2))+cos($x1)*cos($x2)*cos(deg2rad($y2) - deg2rad($y1)))*(6378.137);
    $distn = FLOOR ( ROUND($dist,1) * 2 ) / 2 ;

echo $row['username'];
echo $distn;

}

因此,在第一个foreach中,我计算了每个用户到我的距离.
比我想对与我的距离后的用户进行排序并显示它们
那里有我的名字,也有我的距离.

user1 0.5km distance
user2 1km distance

但是我不会工作.
谢谢你的帮助 :)

解决方法:

创建一个距离函数

function getdistance ($lat, $lon)
{
    global $mylng, $mylat;
    $x1 = deg2rad($mylng);
    $x2 = deg2rad($lon);
    $y1 = deg2rad($mylat);
    $y2 = deg2rad($lat);

    $dist = acos(sin($x1)*sin($x2)+cos($x1)*cos($x2)*cos($y2 - $y1))*(6378.137);
    return $dist;
}

创建一个比较函数

function comparedistance ($user1, $user2)
{
    return getdistance ($user1['lat'], $user1['lng']) - getdistance ($user2['lat'], $user2['lng']);
}

然后,您可以通过uasort传递数组:

uasort ($users, 'comparedistance');

有关更多信息,请参见http://php.net/manual/en/function.uasort.php.

编辑:

您的程序可以被重写:

function getdistance ($lat, $lon)
{
    global $mylng, $mylat;

    $x1 = deg2rad($mylng);
    $x2 = deg2rad($lon);
    $y1 = deg2rad($mylat);
    $y2 = deg2rad($lat);

    $dist = acos(sin($x1)*sin($x2)+cos($x1)*cos($x2)*cos($y2 - $y1))*(6378.137);
    return $dist;
}

function comparedistance ($user1, $user2)
{
    return getdistance ($user1['lat'], $user1['lng']) - getdistance ($user2['lat'], $user2['lng']);
}

$mylat = $_SESSION['lat'];
$mylng = $_SESSION['lng'];

$statement = $pdo->prepare("SELECT * FROM users");
$statement->execute();
$users = $statement->fetchAll();

uasort ($users, 'comparedistance');

foreach ($users as $row) { 
    $dist = getdistance ($row['lat'], $row['lng']);
    $distn = floor(round($dist,1) * 2) / 2 ;

    echo $row['username']. ": " . $distn . "km distance";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐