Sortieren eines Arrays nach Spaltenwert in PHP: Alles, was Sie wissen müssen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Sortieren eines Arrays nach Spaltenwert in PHP: Ein Leitfaden für alle, die das Googeln satt haben

\n\n

Haben Sie jemals eine Situation erlebt, in der Sie eine Liste von Benutzern, Produkten oder Bestellungen als Array assoziativer Arrays haben und diese nach einem bestimmten Feld sortieren müssen? Sagen wir, nach Alter, Preis oder Registrierungsdatum. Wenn ja – Sie sind nicht allein. Diese Frage auf Stack Overflow hat Tausende von Aufrufen und Dutzende von Stimmen gesammelt. Und heute werden wir sie ein für alle Mal klären.

\n\n

In diesem Artikel zeigen wir nicht nur, wie usort und array_multisort funktionieren. Wir beantworten die häufigsten Fragen, die Entwickler haben: Wie sortiert man nach einem verschachtelten Schlüssel, wie behält man Schlüssel, wie sortiert man nach mehreren Feldern und was tut man, wenn die Daten aus einer Datenbank kommen.

\n\n

Los geht's!

\n\n

Was ist ein Array assoziativer Arrays und warum sollte man es sortieren?

\n\n

Stellen Sie sich vor, Sie haben eine Liste von Benutzern:

\n\n
$users = [\n    ['name' => 'Anna', 'age' => 25, 'city' => 'Moskau'],\n    ['name' => 'Boris', 'age' => 30, 'city' => 'Sankt Petersburg'],\n    ['name' => 'Viktor', 'age' => 22, 'city' => 'Kasan'],\n];
\n\n

Dies ist ein typisches mehrdimensionales Array in PHP, bei dem jedes Element ein assoziatives Array mit denselben Schlüsseln ist. Oft muss eine solche Liste nach einem bestimmten Feld sortiert ausgegeben werden: nach Alter (aufsteigend), nach Name (alphabetisch) oder nach Stadt.

\n\n

Die Standard-PHP-Funktionen wie sort() oder asort() helfen hier nicht – sie arbeiten mit einfachen Werten, nicht mit verschachtelten Strukturen. Es werden spezielle Werkzeuge benötigt.

\n\n

Die beliebteste Methode: usort mit einer anonymen Funktion

\n\n

Wenn Sie Stack Overflow besuchen und die Diskussion "Sort an array of associative arrays by column value" öffnen, wird Ihnen in 90% der Fälle usort empfohlen. Das ist logisch: Die Funktion usort ermöglicht es, eine eigene Vergleichslogik für zwei Array-Elemente zu definieren.

\n\n

Wie sortiert man ein Array nach einem Feld (Alter)

\n\n

Angenommen, wir möchten unsere Benutzer nach Alter aufsteigend sortieren:

\n\n
<?php\n$users = [\n    ['name' => 'Anna', 'age' => 25, 'city' => 'Moskau'],\n    ['name' => 'Boris', 'age' => 30, 'city' => 'Sankt Petersburg'],\n    ['name' => 'Viktor', 'age' => 22, 'city' => 'Kasan'],\n];\n\nusort($users, function($a, $b) {\n    return $a['age'] <=> $b['age'];\n});\n\nprint_r($users);\n?>
\n\n

Ergebnis:

\n
Array\n(\n    [0] => Array ( [name] => Viktor [age] => 22 [city] => Kasan )\n    [1] => Array ( [name] => Anna [age] => 25 [city] => Moskau )\n    [2] => Array ( [name] => Boris [age] => 30 [city] => Sankt Petersburg )\n)
\n\n

Beachten Sie: Wir verwenden den Raumschiff-Operator <=> (spaceship), der in PHP 7 eingeführt wurde. Er gibt -1, 0 oder 1 zurück, was ideal für Sortierfunktionen ist. Wenn Sie absteigend sortieren möchten, tauschen Sie einfach $a und $b:

\n\n
usort($users, function($a, $b) {\n    return $b['age'] <=> $a['age'];\n});
\n\n

Sortierung nach einem String-Feld (Name)

\n\n

Bei Strings ist es genauso einfach. Möchten Sie die Benutzer alphabetisch nach Namen sortieren? Bitte sehr:

\n\n
usort($users, function($a, $b) {\n    return strcmp($a['name'], $b['name']);\n});
\n\n

Oder verwenden Sie wieder <=> – es funktioniert auch mit Strings:

\n\n
usort($users, function($a, $b) {\n    return $a['name'] <=> $b['name'];\n});
\n\n

Häufige Fragen und Stolperfallen

\n\n

1. Wie sortiert man nach einem verschachtelten Schlüssel?

\n\n

Manchmal haben Daten eine tiefere Struktur. Zum Beispiel hat jeder Benutzer ein Array profile

Blogs

Buchempfehlungen