PHP 距离我最近排序+二维数组按指定列排序详解编程语言

本文章主要介绍了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; 
}

原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/228234.html

(0)
上一篇 2022年1月11日
下一篇 2022年1月11日

相关推荐

发表回复

登录后才能评论