PHP 距离我最近排序+二维数组按指定列排序
思路:
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 距离我最近排序+二维数组按指定列排序的更多相关文章
- 三重for循环实现对二维数组的按列排序(JavaScript)
由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...
- PHP二维数组--去除指定列含有重复项的数组
给定二维数组: $arr = array( '0' => array('张三',2,3,4), '1' => array('李四',2,3,4), '2' => array('张三' ...
- Java一维与二维数组的拷贝与排序
Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- PHP 按二维数组的键值排序
/** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...
- PHP二维数组按某个字段排序
//准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- PHP 二维数组某个字段进行排序
/** * @param $arrUsers * @return mixed *二维数组某个字段进行排序 */ function quick_sort($arrUsers) { $sort = arr ...
- Java 多维数组 按某列 排序
public MetaCell[][] getByColumn(final int columnIndex, int decisionIndex) {//[注意]final咯 ...
随机推荐
- 搬家至csdn
搬家至csdn https://blog.csdn.net/qq_42866164
- iOS特殊界面旋屏设置的方法之一
1.AppDelegate.h @property (assign, nonatomic) BOOL allowRotation; 2.AppDelegate.m #pragma mark - 自动旋 ...
- vs2013 找不到帮助 help查看器
我手贱把help查看器卸载了,打开帮助提示找不到帮助. 不想把vs重装,打开ios镜像,加载,cmd进入 到packages\Help 执行msiexec /i help3_vs_net.msi vs ...
- Array.prototype
Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法. /* 如果JavaScript本身不提供 first() 方法, 添加一个返回 ...
- PAT Advanced 1011 World Cup Betting (20 分)
With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...
- GUI学习之三十三——QProgressBar学习总结
今天总结的是QProgressBar的使用方法 一.描述 提供了一个水平或垂直的进度条,用于向用户提供操作进度的指示,用户也可以从进度条看出来程序是否正在运行. 二.功能作用 1.设置范围和当前值 Q ...
- oracle删除数据文件
在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表.视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间. 一.使用offline数据文件的方法 非归档模式使用 ...
- Thymeleaf 模板引擎简介
目录 Thymeleaf 模板引擎 官方文档下载 Hello World 新建应用 后台控制器 前端页面 浏览器访问测试 Thymeleaf 模板引擎1.Thymeleaf 是 Web 和独立环境的现 ...
- [Comet OJ - Contest #9 & X Round 3] Namid[A]me
传送门 一开始读错题了,以为是\(\sum_{1\leq u\leq v\leq n}f(u,v)\),还疑惑这题这么简单怎么没人做( 实际上是\(\sum_{1\leq u\leq v\leq n} ...
- Qt学习笔记-Widget布局管理
Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...