php - 对 foreach 结果进行排序
问题描述
我有一个 foreach 循环,我想按距离对结果进行排序。
foreach ($this->items as $i => $item) {
$latitudeFrom = 123;
$longitudeFrom = 123;
$theta = $longitudeFrom - $this->item->longitude;
$dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($this->item->latitude)) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($this->item->latitude)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$distance = $miles * 1.609344;
}
echo $distance;
我想按$distance
. 如何才能做到这一点?
解决方案
$latitudeFrom = 123;
$longitudeFrom = 123;
usort($this->items, function ($item1, $item2) use ($latitudeFrom, $longitudeFrom) {
$distance1 = acos(rad2deg(sin(deg2rad($latitudeFrom)) * sin(deg2rad($item1->latitude)) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($item1->latitude)) * cos(deg2rad($longitudeFrom - $item1->longitude)))) * 60 * 1.1515 * 1.609344;
$distance2 = acos(rad2deg(sin(deg2rad($latitudeFrom)) * sin(deg2rad($item2->latitude)) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($item2->latitude)) * cos(deg2rad($longitudeFrom - $item2->longitude)))) * 60 * 1.1515 * 1.609344;
$result = 0;
if ($distance1 < $distance2) {
$result = -1;
} else if ($distance1 > $distance2) {
$result = 1;
}
return $result;
});
$this->items
现在已排序。要颠倒顺序,只需切换<
and >
。
推荐阅读
- html - 更改 twitter bootstrap 导航栏项目的颜色
- dataframe - 使用烧瓶上传并显示数据框 | AttributeError: 'builtin_function_or_method' 对象没有属性 'replace'
- c++ - 具有非常量大小的字符串数组的模棱两可编译?
- ios - 如何使用 iOS 14 触发多播权限的本地网络对话授权
- powershell - 查看来自 Powershell 的 Get-ACL 的所有访问
- javascript - 我怎样才能获得多个ID getElementById
- reactjs - 使用 typescript、react 和 graphql 以正确方式进行查询的问题
- python - 是否可以使用 strptime 将星期几转换为日期时间格式?
- javascript - 反映 devServer 中的更改,无需重新加载 Node 服务器(Webpack 和 Vue-cli)
- rust - Rust 无法构建 64 位 RISC-V 二进制文件