Diese Lösung gilt für usort() mit einer einfach zu merkenden Notation für mehrdimensionales Sortieren. Der Spaceship-Operator <=> wird verwendet, der ab PHP 7 verfügbar ist.
usort($in,function($a,$b){
return $a['first'] <=> $b['first'] //erstens aufsteigend
?: $a['second'] <=> $b['second'] //zweitens aufsteigend
?: $b['third'] <=> $a['third'] //drittens absteigend (a b getauscht!)
//usw
;
});
Beispiele:
$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],
];
Erste Aufgabe: Sortieren nach Rang aufsteigend, Nachname aufsteigend
usort($in,function($a,$b){
return $a['rank'] <=> $b['rank'] //erstens aufsteigend
?: $a['surname'] <=> $b['surname'] //zweitens aufsteigend
;
});
Zweite Aufgabe: Sortieren nach Rang absteigend, Nachname aufsteigend, Vorname aufsteigend
usort($in,function($a,$b){
return $b['rank'] <=> $a['rank'] //erstens absteigend
?: $a['surname'] <=> $b['surname'] //zweitens aufsteigend
?: $a['firstname'] <=> $b['firstname'] //drittens aufsteigend
;
});
Dritte Aufgabe: Sortieren nach Rang absteigend, Geburtsdatum aufsteigend
Das Datum kann nicht in dieser Notation sortiert werden. Es wird mit strtotime konvertiert.
usort($in,function($a,$b){
return $b['rank'] <=> $a['rank'] //erstens absteigend
?: strtotime($a['birthdate']) <=> strtotime($b['birthdate']) //zweitens aufsteigend
;
});