2 回答
TA贡献1818条经验 获得超3个赞
这是一种方法:
function combineComparators(...$comparators)
{
return function($a, $b) use($comparators)
{
foreach($comparators as $c)
{
$res = $c($a, $b);
if($res!=0)
return $res;
}
return 0;
};
}
$a = [
['name' => 'Alfred', 'age' => 40],
['name' => 'Mark', 'age' => 40],
['name' => 'Lue', 'age' => 45],
['name' => 'Ameli', 'age' => 38],
['name' => 'Barb', 'age' => 38],
];
$cmp1 = function ($a, $b) {
return -strnatcasecmp($a['age'], $b['age']); // desc
};
$cmp2 = function ($a, $b) {
return strnatcasecmp($a['name'], $b['name']); // asc
};
usort($a, combineComparators($cmp1, $cmp2));
var_dump($a);
TA贡献1851条经验 获得超5个赞
有人会有一个很好的,但我更喜欢。usortarray_multisort
提取每列,按顺序对列进行排序,然后按该排序顺序对原始列进行排序:
array_multisort(array_column($a, 'age'), SORT_DESC, array_column($a, 'name'), SORT_ASC, $a);
- 2 回答
- 0 关注
- 128 浏览
添加回答
举报
