这个解决方案适用于usort()函数,使用易于记忆的符号来进行多维排序。此处使用了太空船操作符<=>,该符号在PHP 7及以上版本可用。
usort($in,function($a,$b){
return $a['first'] <=> $b['first']
?: $a['second'] <=> $b['second']
?: $b['third'] <=> $a['third']
;
});
示例:
$in = [
['firstname' => 'Anton', 'surname' => 'Gruber', 'birthdate' => '03.08.1967', 'rank' => 3],
['firstname' => 'Anna', 'surname' => 'Egger', 'birthdate' => '04.01.1960', 'rank' => 1],
['firstname' => 'Paul', 'surname' => 'Mueller', 'birthdate' => '15.10.1971', 'rank' => 2],
['firstname' => 'Marie', 'surname' => 'Schmidt ', 'birthdate' => '24.12.1963', 'rank' => 2],
['firstname' => 'Emma', 'surname' => 'Mueller', 'birthdate' => '23.11.1969', 'rank' => 2],
];
第一个任务:按级别升序、姓氏升序排序
usort($in,function($a,$b){
return $a['rank'] <=> $b['rank']
?: $a['surname'] <=> $b['surname']
;
});
第二任务:按照排名降序、姓氏升序、名字升序排序。
usort($in,function($a,$b){
return $b['rank'] <=> $a['rank']
?: $a['surname'] <=> $b['surname']
?: $a['firstname'] <=> $b['firstname']
;
});
第三个任务:按照等级降序和出生日期升序排序
这种格式无法对日期进行排序。需要使用strtotime进行转换。
usort($in,function($a,$b){
return $b['rank'] <=> $a['rank']
?: strtotime($a['birthdate']) <=> strtotime($b['birthdate'])
;
});
array_multisort(array_column($array, 'order'), SORT_ASC, $array);
- undefined