PHP-Arrays sortieren mit benutzerdefinierter Funktion, Unterschied usort, uasort und uksort

Die PHP-Bibliothek hat eine große Anzahl von Funktionen, welche das Sortieren von Arrays erleichtern. Die usort-Funktionen bieten die Möglichkeit, zur Sortierung eigene Methoden zu verwenden. Hier zeige ich wie man diese mithilfe anonymer Funktionen (Closures) anwendet.

Es gibt 3 Funktionen, welche alle gleiche Parameter, aber unterschiedliche Auswirkung haben:

  • usort: Sortiert das Array, behält aber die Schlüssel nicht bei
  • uasort: Sortiert das Array, behält aber die Schlüssel
  • uksort: Sortiert das Array nach den Schlüsseln

Sehen wir uns an wie man die Funktion usort grundsätzlich benutzen kann:

Wir können also eine Vergleichsfunktion direkt übergeben (anonyme Funktion), welche als Parameter 2 Werte aus dem Array erhält und als Rückgabe je nachdem welcher Wert größer ist 1 oder -1 zurück gibt. Wie wir weiters sehen, hat usort unsere Schlüssel (Indexe) neu gesetzt.

Im Vergleich dazu würde uasort folgendes Ergebnis liefern:

Hier bleiben die Index-Assoziationen also erhalten.

Mit uksort können wir das Array nach den Schlüsseln sortieren:

Was anonyme Funktionen noch ermöglichen, ist Variablen außerhalb der Funktion zu vererben und darauf zuzugreifen. Hierzu ein Beispiel anhand der usort-Funktion:

Hier verwenden wir innerhalb der anonymen Funktion die Variable $sortByLetter, und sortieren somit nach dem 2. Buchstaben (String-Indizierung beginnt in PHP bei 0!).

Man kann den usort-Funktionen aber auch Sortier-Funktionen übergeben und muß nicht anonyme Funktionen verwenden. Hier ein Beispiel:

Hier habe ich außerdem die Funktion strcmp zum Vergleichen verwendet, welche 2 Strings vergleicht und den richtigen Rückgabewert für die Sortier-Funktionen liefert.