W3docs

Arrays sortieren

PHP bietet zahlreiche integrierte Funktionen zum Sortieren von Arrays – nach Wert, Schlüssel oder eigener Regel. Lernen Sie die wichtigsten kennen.

Einführung in das Sortieren von PHP-Arrays

Ein Array in PHP ist eine Sammlung von Elementen, die über einen Index (eine numerische Position) oder einen Schlüssel (eine Bezeichnung) gespeichert und abgerufen werden. Sortieren bedeutet, diese Elemente in eine definierte Reihenfolge zu bringen – aufsteigend, absteigend, nach Wert, nach Schlüssel oder nach einer eigenen Regel.

Diese Seite behandelt PHPs integrierte Sortierfunktionen, das Verhalten jeder einzelnen und – ebenso wichtig – welche Funktion man wählen sollte, je nachdem ob man Schlüssel, Werte oder eine benutzerdefinierte Reihenfolge benötigt.

Unterschiede zwischen den Sortierfunktionen

Zwei Fragen entscheiden, welche Funktion benötigt wird:

  1. Sortierung nach Wert oder Schlüssel? Einfache Listen (indizierte Arrays) werden nach Wert sortiert; assoziative Arrays können nach beidem sortiert werden.
  2. Schlüssel-Wert-Zuordnung beibehalten? sort()/rsort() verwerfen die ursprünglichen Schlüssel und indizieren ab 0 neu. Die a*- und k*-Familie bewahrt die Zuordnung.
FunktionSortiert nachReihenfolgeSchlüssel erhalten?
sort()Wertaufsteigendnein (neu indiziert)
rsort()Wertabsteigendnein (neu indiziert)
asort()Wertaufsteigendja
arsort()Wertabsteigendja
ksort()Schlüsselaufsteigendja
krsort()Schlüsselabsteigendja
usort()Wert (benutzerdefiniert)eigene Regelnein (neu indiziert)
uasort()Wert (benutzerdefiniert)eigene Regelja
uksort()Schlüssel (benutzerdefiniert)eigene Regelja

Alle diese Funktionen sortieren das Array in place (sie verändern die übergebene Variable) und geben bei Erfolg true zurück statt eines neuen Arrays – ein häufiger Stolperstein für Einsteiger.

Arrays aufsteigend sortieren

Die Funktion sort() sortiert ein Array in aufsteigender Reihenfolge: Zeichenketten alphabetisch, Zahlen numerisch. Sie verändert das ursprüngliche Array direkt und indiziert es neu ab 0, sodass ursprüngliche Schlüssel verloren gehen. Verschiedene Datentypen sollten nicht in einem Array gemischt werden, da Vergleiche zwischen z. B. Zeichenketten und Zahlen zu unerwarteten Ergebnissen führen können.

$fruits = ['lemon', 'orange', 'banana', 'apple'];
sort($fruits);
print_r($fruits);
// Output: Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )

Arrays absteigend sortieren

Die Funktion rsort() ist das Gegenstück zu sort() – sie ordnet Elemente vom höchsten zum niedrigsten Wert. Wie sort() arbeitet sie in place und indiziert das Array neu.

$numbers = [5, 2, 9, 1, 7];
rsort($numbers);
print_r($numbers);
// Output: Array ( [0] => 9 [1] => 7 [2] => 5 [3] => 2 [4] => 1 )

Assoziative Arrays nach Wert sortieren

Wenn die Schlüssel eine Bedeutung tragen (Namen, IDs, Bezeichnungen), sollten die a*-Funktionen verwendet werden, damit Schlüssel-Wert-Paare zusammenbleiben. Die Funktion asort() sortiert nach Wert in aufsteigender Reihenfolge; arsort() tut dasselbe in absteigender Reihenfolge.

$ages = ['Peter' => 35, 'John' => 28, 'Mary' => 32];
asort($ages);
print_r($ages);
// Output: Array ( [John] => 28 [Mary] => 32 [Peter] => 35 )

Man beachte, dass jeder Name mit seinem Alter verknüpft bleibt – das ist der Unterschied zu sort(), das die Namen verwerfen würde.

Assoziative Arrays nach Schlüssel sortieren

Die Funktion ksort() sortiert nach Schlüssel in aufsteigender Reihenfolge und behält dabei jeden Schlüssel an seinen Wert gebunden; krsort() sortiert nach Schlüssel in absteigender Reihenfolge.

$colors = ['red' => '#FF0000', 'blue' => '#0000FF', 'green' => '#008000'];
ksort($colors);
print_r($colors);
// Output: Array ( [blue] => #0000FF [green] => #008000 [red] => #FF0000 )

Natürliche Reihenfolge beim Sortieren

Eine reguläre Zeichenkettensortierung vergleicht Zeichen für Zeichen, sodass 'img10' vor 'img2' einsortiert wird (weil '1' < '2'). Die Funktion natsort() verwendet einen Algorithmus für „natürliche Reihenfolge", der eingebettete Zahlen als Zahlen vergleicht – so wie ein Mensch Dateinamen ordnen würde. Schlüssel werden dabei erhalten.

$files = ['img12.png', 'img10.png', 'img2.png', 'img1.png'];
natsort($files);
print_r($files);
// Output: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

Für dasselbe Verhalten ohne Berücksichtigung von Groß-/Kleinschreibung kann natcasesort() verwendet werden.

Benutzerdefinierte Sortierung mit usort()

Wenn die eingebauten Reihenfolgen nicht ausreichen – etwa zum Sortieren von Objekten, mehrdimensionalen Arrays oder nach einem abgeleiteten Wert – ermöglicht usort() die Angabe einer eigenen Vergleichsfunktion. Der Callback erhält zwei Elemente und muss eine negative Zahl, 0 oder eine positive Zahl zurückgeben, je nachdem ob das erste Element vor, gleich oder nach dem zweiten einzuordnen ist.

$people = [
    ['name' => 'Mary', 'age' => 32],
    ['name' => 'Peter', 'age' => 35],
    ['name' => 'John', 'age' => 28],
];

usort($people, function ($a, $b) {
    return $a['age'] <=> $b['age']; // spaceship operator: ascending by age
});

foreach ($people as $person) {
    echo $person['name'] . ': ' . $person['age'] . "\n";
}
// Output:
// John: 28
// Mary: 32
// Peter: 35

Der <=> „Raumschiff"-Operator gibt genau die -1 / 0 / 1 zurück, die der Callback benötigt, was ihn zur idiomatischen Wahl macht. Sollen Schlüssel erhalten bleiben, verwendet man uasort(); für eine benutzerdefinierte Schlüsselregel nimmt man uksort().

Die richtige Funktion wählen

  • Einfache Liste, Schlüssel unwichtig → sort() / rsort().
  • Assoziatives Array, nach Wert sortieren, Schlüssel behalten → asort() / arsort().
  • Assoziatives Array, nach Schlüssel sortieren → ksort() / krsort().
  • Dateinamen oder versionsähnliche Zeichenketten → natsort() / natcasesort().
  • Objekte, verschachtelte Arrays oder beliebige eigene Regeln → usort() / uasort() / uksort().

Wenn lediglich die bestehende Reihenfolge umgekehrt werden soll ohne Neusortierung, ist array_reverse() kostengünstiger als eine vollständige Sortierung. Um mehrere Arrays gemeinsam oder nach mehreren Spalten zu sortieren, siehe array_multisort().

Fazit

PHP bietet ein vollständiges Werkzeugset zum Sortieren von Arrays, und die richtige Wahl hängt von zwei Fragen ab: Sortiert man nach Wert oder nach Schlüssel, und müssen die Schlüssel erhalten bleiben? sort() und rsort() verarbeiten einfache Listen, die a*/k*-Familie behandelt assoziative Daten, natsort() ermöglicht menschenfreundliche Reihenfolge, und die u*-Familie übernimmt alles Benutzerdefinierte. Wichtig: Alle diese Funktionen sortieren in place und geben einen booleschen Wert zurück – kein neues Array.

Übungen

Übung
Welche der folgenden sind gültige integrierte Sortierfunktionen in PHP?
Welche der folgenden sind gültige integrierte Sortierfunktionen in PHP?
Was this page helpful?