php - 使用 usort 按多个数组列排序
问题描述
我知道我可以使用这样的方法按一列对数组进行排序:
function cmp($a, $b)
{
return $b['column'] - $a['column'];
}
usort($array, "cmp");
这模拟了ORDER BY column DESC
.
如果我想通过更多列来模拟ORDER BY column1 DESC, column2 ASC
or怎么办?ORDER BY column1, column2 DESC
是否可以使用 PHP,或者这几乎是 SQL 可以完成的工作?谢谢。
解决方案
我相信你的意思是数组多排序
array_multisort — 对多个或多维数组进行排序
简单的例子:
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
array_multisort(array_column($data, 'volume'), SORT_DESC, array_column($data, 'edition'), SORT_ASC, $data);
这将$data
首先按 DESC 中的卷字段排序,然后按 ASC 中的版本字段排序。
推荐阅读
- c# - 创建配置节处理程序 workerConfiguration 时出错 - 启动项目
- python - 变分自动编码器 - 警告:张量流:当最小化损失时,变量 [] 不存在梯度
- python - 在 Python 中删除文件时如何自动按 Enter?
- c# - 计算达到一定百分比所需的数量
- javascript - 使用时刻和使用 .net 核心的 Web api 请求的日期格式不正确
- python - 使用 webhook 以其他人的身份发送消息
- c - c 中的 if(errno != EEXIST) 是什么?
- javascript - 如何在 MongoDB 中为作为教师模式的一部分的时间表创建模式?
- html - 使用状态机验证表单域
- visual-studio - VS 2019 解决方案资源管理器引用旧 Nuget 包中的文件