思路:

1、获取我的位置,即:我的经纬度

2、各站点须有位置     即:排序对象有位置经纬度

3、查询要排序的站点列表

4、循环遍历计算  与我的距离

5、二维数组按 指定列(距离)排序

具体如下:

1、是小程序中的功能,因而小程序接口获取我的经纬度

wx.getLocation({
type: 'wgs84',
success(res) {         let latitude = res.latitude;//纬度 let longitude = res.longitude;//经度
        //排序请求时 携带以上参数
     }
})

2、项目中新增站点的时候须有位置地图功能,保存每条站点数据包含该站点的 经纬度数据

3、查询站点列表   略  假设查询站点数据如下:

$list = [
['id'=>1,'name'=>'站点1','latitude'=>34.45678,'longitude'=>116.43055],
['id'=>2,'name'=>'站点2','latitude'=>34.35678,'longitude'=>116.43055],
['id'=>3,'name'=>'站点3','latitude'=>34.55678,'longitude'=>116.43055]
]

4、循环遍历计算距离

$latitude = $_POST['my_latitude']; //我的纬度
$latitude = $_POST['my_latitude']; //我的经度
foreach ($list as $k=>$v){
$list[$k]['distance'] = get_distance($my_latitude,$my_longitude,$v['latitude'],$v['longitude']);
} //经纬度 两点间的距离
function get_distance($lat1, $lon1, $lat2, $lon2) {
$R = 6371393; //地球平均半径,单位米
$dlat = deg2rad($lat2-$lat1);//角度转化为弧度
$dlon = deg2rad($lon2-$lon1);
$a = pow(sin($dlat/2), 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * pow(sin($dlon/2), 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$d = $R * $c;
return round($d);
}

5、按距离排序

$list  =  arr_sort($list,'distance');

//二维数组 按二维指定列排序
//$arr 要排序的二维数组
//$key 排序依据的列
//$order 升序|降序 默认升序
function arr_sort($arr,$key,$order=SORT_ASC){
$key_arr = array_column($arr,$key);
if(empty($key_arr)){
return false;
}
array_multisort($key_arr,$order,$arr);
return $arr;
}

PHP 距离我最近排序+二维数组按指定列排序的更多相关文章

  1. 三重for循环实现对二维数组的按列排序(JavaScript)

    由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...

  2. PHP二维数组--去除指定列含有重复项的数组

    给定二维数组: $arr = array( '0' => array('张三',2,3,4), '1' => array('李四',2,3,4), '2' => array('张三' ...

  3. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

  4. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  5. PHP 按二维数组的键值排序

    /** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...

  6. PHP二维数组按某个字段排序

    //准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...

  7. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  8. PHP 二维数组某个字段进行排序

    /** * @param $arrUsers * @return mixed *二维数组某个字段进行排序 */ function quick_sort($arrUsers) { $sort = arr ...

  9. Java 多维数组 按某列 排序

        public MetaCell[][] getByColumn(final int columnIndex, int decisionIndex) {//[注意]final咯          ...

随机推荐

  1. git上传代码到code.csdn.net

    国内有code.csdn.net速度很快 用git上传需要去下载git程序 很简单. 我是Windows下 先code.csdn.net创建一个项目 https://code.csdn.net/das ...

  2. Linux下用命令查看CPU ID以及厂家等信息

    Linux下用命令查看CPU ID // 获得CPU IDdmidecode -t 4 | grep ID |sort -u |awk -F': ' '{print $2}' // 获得磁盘IDfdi ...

  3. 一个有python扩展库的下载网站

    https://www.lfd.uci.edu/~gohlke/pythonlibs/

  4. 写了一个简单的 Mybatis

    写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...

  5. 高考数学九大超纲内容(1)wffc

    我校2016$\thicksim$2017学年度(上期)半期高三(理科)考试第12题 已知奇函数\(f(x)\)的定义域是\((-1,0)\bigcup\hspace{0.05cm}(0,1)\),\ ...

  6. FAT12 img tool

    NJU/2019/OS Description: CODE: Main.cpp: /* @author: Edwin Xu @Date:2019/11/13 @Note: just ASCII */ ...

  7. noip2017简要题解。

    重新写了一下去年的题来看看自己到底是有多傻逼. 小凯的疑惑 打表. 时间复杂度 搞了一大坨题面,但是真正有用的信息只有几个: 判断他给你的复杂度是多少. 判断当前循环进不进的去. 判断当前循环产生的贡 ...

  8. R语言-三种方法绘制单位圆

    与一般开发语言不同,R以数据统计分析和绘图可视化为主要卖点.本文是第一篇博客,解决一个简单的绘图问题,以练手为目的. 以下直接给出三种单位圆的画法: 方法1 f=seq(,*pi,0.001) x=s ...

  9. C#中[JsonIgnore]意义

    字面意义是忽略序列化,就是当字段在序列化时,被[JsonIgnore]标记了的字段将被忽略序列化 序列化输出中使用Id和Name属性,但我绝对不会对AlternateName和Color感兴趣.我用[ ...

  10. CSS-动画,让图片上的图形有涨起来的效果(逐渐变高)和(逐渐变长)

    效果图: html: <div class="inner3"> <div class="over"> <img src=" ...