Objekte in einem Array in PHP sortieren.

gepostet am 09.05.2013 um 19:05 Uhr

Schon oft stand man vor der Herausforderung, Objekte in einem Array zu sortieren. Mit diesem Codeschnipsel kann man das tun:

Um das Array sortieren zu können benötigen wir aber noch zwei kleine Definitionen:

Diese sagen der uasort Funktion eigentlich nur, wie die Objekte sortiert werden sollen.

Der Aufruf ist ganz einfach. Nehmen wir mal an wir haben ein Objekt Auto:

Daraus haben wir jetzt ein Array erstellt und möchten nach der Geschwindigkeit und dem Verbrauch sortieren. Dafür müssen wir uns ein Array erstellen das die Sortier Definition darstellt.

In der Reihenfolge in der das Array definiert ist, wird auch sortiert. Das heißt in diesem Fall zuerst nach der Geschwindigkeit, dann nach dem Verbrauch.

und dann rufen wir dass alles nur noch auf:

Diesen Code habe ich in einem meiner Projekte (frixcha.de) verwendet.

 

Achtung:

Der nette Kommentarschreiber Tobi hat mich auf etwas hingewiesen: Wenn man versucht Objekte nach einem Feld zu sortieren, dass vom Typ DateTime ist, schlägt die Sortierung fehl. Dieser Fehler ist in dem Tutorial “Objekte sind in einem Array nicht sortierbar.” mit Lösung beschrieben. Dieser Fehler wird wohl bei mehr Typen auftreten.

Ihr seht! Kommentieren ist wichtig! 🙂

5 Antworten zu “Objekte in einem Array in PHP sortieren.”

  1. Objekte sortieren nach bestimmten Kriterien…

    Siehe hier: Tutorial Aufruf und Benutzung steht alles dort beschrieben! Der Vorteil an dieser Funktion ist, dass man beim Aufruf der Sortierfunktion mehrere Felder angeben kann, nach denen da……

  2. kowarsnik sagt:

    Cooles Schnipselchen!
    Ich habe nach einer Möglichkeit gesucht Objekte nicht nur nach einer Angabe zu sortieren. Passt ganz genau!

  3. Tobi sagt:

    Hi,

    Dein Code funktioniert soweit ganz gut. Nur wenn ich versuche nach einem Feld zu sortieren in dem ein Objekt der Klasse Datetime drinnen steht, bekomme ich einen Fehler.

    Hast du dafür eine Lösung?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.