它的工作原理类似于 SQL 中的魅力:
SELECT * FROM person ORDER BY age DESC, name ASC
但是,如果我们在PHP数组中有这样的数据呢?我们怎样才能做到呢?例如,如果我有
$a = [
['name' => 'Alfred', 'age' => 40],
['name' => 'Mark', 'age' => 40],
['name' => 'Lue', 'age' => 45],
['name' => 'Ameli', 'age' => 38],
['name' => 'Barb', 'age' => 38],
];
我想按年龄降序排序,然后按名字升序排序。就像上面的 SQL 一样。因此,正确的名称顺序是:。请参阅数据库小提琴。Lue, Alfred, Mark, Ameli, Barb
在PHP中获取它的错误尝试是:
usort($array, function ($a, $b) {
return -strnatcasecmp($a['age'], $b['age']); // desc
});
usort($array, function ($a, $b) {
return strnatcasecmp($a['name'], $b['name']); // asc
});
两个 usort 调用中的每一个都可以正常工作,但它会覆盖上一个结果,而我想将它们全部组合在一起。理想情况下,我希望有一个函数,接受任何数量的可调用来混合它们。
请指教。
更新:正如下面所合理评论的那样,array_multisort适合像这样对常规数组进行排序。但我想找到解决方案来结合.任何比较器,甚至像这个。
顺便说一句,SQL允许按表达式排序,而不仅仅是按简单字段排序。comparator closures
冉冉说
泛舟湖上清波郎朗
江户川乱折腾
随时随地看视频慕课网APP