2 回答

TA貢獻1818條經(jīng)驗 獲得超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條經(jīng)驗 獲得超5個贊
有人會有一個很好的,但我更喜歡。usort
array_multisort
提取每列,按順序?qū)α羞M行排序,然后按該排序順序?qū)υ剂羞M行排序:
array_multisort(array_column($a, 'age'), SORT_DESC, array_column($a, 'name'), SORT_ASC, $a);
- 2 回答
- 0 關(guān)注
- 102 瀏覽
添加回答
舉報