PHP Array von Objekten sortieren: Komplettanleitung

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

Array von Objekten in PHP sortieren: Vom Anfänger zum Profi

\n\n

Stell dir vor, du entwickelst einen Online-Shop mit PHP. Du hast ein Array mit Produkten, jedes Produkt ist ein Objekt mit Feldern wie price, name und rating. Der Nutzer klickt auf „Nach Preis sortieren“ – und du musst das Array sofort neu anordnen. Wie machst du das richtig und elegant? Genau darum geht es in dieser Anleitung.

\n\n

Das Thema Array von Objekten nach einer Eigenschaft in PHP sortieren gehört zu den meistgesuchten Fragen auf Stack Overflow (Millionen von Aufrufen!). Kein Wunder: Die Arbeit mit Objekten ist die Grundlage modernen PHP-Codes, und flexibles Sortieren ist ein absolutes Must-have. Lass uns alles Schritt für Schritt durchgehen – mit praktischen Beispielen und Erklärungen.

\n\n

Warum reicht sort() nicht aus?

\n\n

Anfänger versuchen oft, sort() oder rsort() auf ein Array von Objekten anzuwenden. Das Ergebnis ist ein Fehler oder völliger Unsinn. Warum? Weil diese Funktionen Elemente als einfache Werte (Zahlen oder Strings) vergleichen – ein Objekt ist aber eine komplexe Struktur. PHP weiß nicht, nach welchem Feld du sortieren willst: nach Name, Preis oder Datum. Du musst explizit eine Vergleichsregel angeben.

\n\n

Genau dafür gibt es die Funktionen usort(), uasort() und uksort(). Das „u“ im Namen steht für „user-defined“ – eine benutzerdefinierte Vergleichsfunktion. Du bestimmst selbst, wie zwei Objekte verglichen werden.

\n\n

Basisbeispiel: Benutzer nach Alter sortieren

\n\n

Angenommen, wir haben eine Klasse User und ein Array mit Benutzern:

\n\n
class User {\n    public $name;\n    public $age;\n    \n    public function __construct($name, $age) {\n        $this->name = $name;\n        $this->age = $age;\n    }\n}\n\n$users = [\n    new User('Anna', 25),\n    new User('Max', 30),\n    new User('Olga', 22),\n    new User('Peter', 28)\n];
\n\n

Wir wollen sie aufsteigend nach Alter sortieren. Dafür nutzen wir usort:

\n\n
usort($users, function($a, $b) {\n    return $a->age <=> $b->age;\n});\n\n// Ergebnis:\n// Olga (22), Anna (25), Peter (28), Max (30)
\n\n

Beachte den Spaceship-Operator ( <=> ) – er wurde mit PHP 7.0 eingeführt und macht den Code extrem kompakt. Er gibt -1, 0 oder 1 zurück – perfekt für Vergleichsfunktionen.

\n\n

So funktioniert usort im Detail

\n\n

Die Funktion usort() erwartet zwei Argumente:

\n
    \n
  • Das Array (wird als Referenz übergeben – das ursprüngliche Array wird verändert)
  • \n
  • Eine Callback-Funktion, die zwei Elemente vergleicht
  • \n
\n\n

Der Callback muss zurückgeben:

\n
    \n
  • Eine negative Zahl (meist -1) – wenn das erste Element kleiner ist als das zweite
  • \n
  • 0 – wenn die Elemente gleich sind
  • \n
  • Eine positive Zahl (meist 1) – wenn das erste Element größer ist als das zweite
  • \n
\n\n

Der Spaceship-Operator erledigt das automatisch. So sieht dieselbe Sortierung ohne ihn aus:

\n\n
usort($users, function($a, $b) {\n    if ($a->age == $b->age) return 0;\n    return ($a->age < $b->age) ? -1 : 1;\n});
\n\n

Der Unterschied ist offensichtlich: Der <=>-Operator reduziert vier Zeilen auf eine. Verwende ihn überall, wo PHP 7+ verfügbar ist.

\n\n

Sortieren nach Strings: Groß-/Kleinschreibung und Locale beachten

\n\n

Bei Zahlen ist alles einfach, aber Strings erfordern Aufmerksamkeit. Sortieren wir dieselben Benutzer nach Namen:

\n\n
usort($users, function($a, $b) {\n    return strcmp($a->name, $b->name);\n});\n\n// Oder mit Spaceship:\nusort($users, function($a, $b) {\n    return $a->name <=> $b->name;\n});
\n\n

Es gibt jedoch einen Haken: Der Spaceship-Operator unterscheidet Groß- und Kleinschreibung. Der String „apple“ ist kleiner als „Banana“, weil der Code von 'a' (97) kleiner ist als der von 'B' (66). Für eine groß-/kleinschreibungsunabhängige Sortierung verwendest du am besten strcasecmp():

Blogs

Buchempfehlungen