首页 > 解决方案 > 使用 usort 按多个数组列排序

问题描述

我知道我可以使用这样的方法按一列对数组进行排序:

function cmp($a, $b)
{
    return $b['column'] - $a['column'];
}

usort($array, "cmp");

这模拟了ORDER BY column DESC.

如果我想通过更多列来模拟ORDER BY column1 DESC, column2 ASCor怎么办?ORDER BY column1, column2 DESC是否可以使用 PHP,或者这几乎是 SQL 可以完成的工作?谢谢。

标签: phparraysarray-column

解决方案


我相信你的意思是数组多排序

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 中的版本字段排序。


推荐阅读