首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP使用数组从db中选择前五个位置

PHP使用数组从db中选择前五个位置
EN

Stack Overflow用户
提问于 2018-08-31 03:13:23
回答 1查看 0关注 0票数 0

我有一个存储为id,lat,lng和name的数据库中的位置列表。在我的前端表单上,我有一个接受坐标的输入,然后计算从发布的坐标到数据库的距离。一旦我得到所有这些值,我现在想要从fronend形式中选择最接近坐标的前五个位置。请查看下面的代码。我仍然无法弄清楚如何只挑选前五个。我使用键(距离)按升序对数组进行了排序。我想选择前五个距离。

代码语言:javascript
复制
public function sos(){
    $this->load->model('Sos_model');
    $result = $this->Sos_model->get_coord();




    $addressFrom = $_GET['from'];
    $hospitals = array();
    foreach ($result as $row):
        $addressTo = $row->lat.', '.$row->lng;
        $distance = $this->Sos_model->getDistance($addressFrom, $addressTo, "K");       

        $hospitals[] = $distance;


    endforeach;
    asort($hospitals);
    $arrLength = count($hospitals);

    foreach($hospitals as $x => $x_value) {
        echo "Key=" . $x . ", Value=" . $x_value;
        echo "<br>";
    }
}

产量

键= 0,值= 23.167415619785 km 键= 2,值= 23.438390589867 km 键= 1,值= 24.648813516057 km

正如您所看到的,值(距离)按升序排列,这就是我想要使用的内容

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 12:48:52

1)您不需要使用PHP计算距离,因为这可以直接在MySQL中完成

2)你可以使用limit你的数据库查询,你也可以依照不同的距离进行排序,再无需使用PHP的

在下面的代码中,$lat是你的纬度,$lng是你的经度。lat并且lng是表列的名称,您还应该your_table_name用您自己的表名替换。

$sql = "SELECT *, ( 6371 * acos( cos( radians(" . $db->real_escape_string($lat) . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $db->real_escape_string($lng) . ") ) + sin( radians(" . $db->real_escape_string($lat) . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table_name ORDER BY distance ASC limit 5";

这将获得5个最近的条目,按距离(升序)排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档