Arrays sortieren
PHP besitzt verschiedene Möglichkeiten um Arrays zu sortieren. Ihr könnt Arrays entweder nach den Werten sortieren, z.B. diese alphabetisch aufsteigend sortieren, oder bei assoziativen Arrays diese wahlweise auch nach dem Schlüssel sortieren.
Inhaltsverzeichnis
Werte eines Arrays sortieren
Möchte man die Werte eines Arrays sortieren, verwendet man die Funktionen sort für eine aufsteigende Reihenfolge (a,b,c,d usw.) und rsort für eine absteigende Reihenfolge (z,y,x,w usw.).
Beispiel:
<?php $mitarbeiter = array("Klaus","Arnie","Willi"); //Array sortieren sort($mitarbeiter); //Array ausgeben echo "Ausgabe per foreach-Schleife: <br>"; foreach($mitarbeiter AS $name) { echo "$name <br>"; } ?>
Hier wird per sort() das Array in aufsteigender Reihenfolge sortiert und danach mit einer foreach-Schleife ausgegeben.
Schlüsselassoziierung beim Sortieren beibehalten
Die Funktionen sort() und rsort() behalten eine mögliche Schlüsselassoziierung nicht bei. Dies kann Vor- als auch Nachteile haben. Die Funktionen asort() und arsort() dagegen behalten die Assoziierung mit einem Schlüssel bei:
<?php $namen = array("Gerhard" => "Schröder", "Angela" => "Merkel", "Helmut" => "Kohl"); $namenSort = $namen; $namenAsort = $namen; sort($namenSort); echo "Sortiert mittels sort: <br>"; print_r($namenSort); asort($namenAsort); echo "<br> Sortiert mittels asort: <br>"; print_r($namenAsort); ?>
Wie ihr im obigen Beispiel seht, werden bei sort() die Schlüssel gelöscht. Danach kann man nur noch über den Index auf die Werte zugreifen. Bei asort() sind die Schlüssel weiter existent.
Bei nicht assoziativen Arrays ergibt sich ebenfalls ein etwas unterschiedliches Verhalten:
<?php $namen = array("Gerhard Schröder", "Angela Merkel", "Helmut Kohl"); $namenSort = $namen; $namenAsort = $namen; sort($namenSort); echo "Sortiert mittels sort: <br>"; print_r($namenSort); echo '<br> Ausgabe von sort($namen) mittels for-Schleife:<br>'; for($i=0;$i<count($namenSort);$i++) { echo '$nameSort['.$i.'] = '.$namenSort[$i]."<br>"; } asort($namenAsort); echo "<br> Sortiert mittels asort: <br>"; print_r($namenAsort); echo '<br> Ausgabe von asort($namen) mittels for-Schleife:<br>'; for($i=0;$i<count($namenAsort);$i++) { echo '$nameAsort['.$i.'] = '.$namenAsort[$i]."<br>"; } ?>
Wie ihr im obigen Beispiel seht, könnt ihr wenn ihr asort() verwendet nicht mittels for-Schleife durch das Array iterieren. Da die Schlüsselassoziierungen beibehalten wurden, ist die Ausgabe in dem Fall nicht mehr sortiert. Ihr müsst bei normalen Arrays entsprechend sort() nutzen oder auf die foreach-Schleife zurückgreifen.
Natürliche Sortierung eines Arrays
Neben der Funktionen sort() existieren in PHP noch die Funktionen natsort() und natcasesort() die eine natürliche Sortierung der Texte durchführt. Der Unterschied kommt bei Zahlen zu tragen:
<?php $bilder = array("img12.png", "img10.png", "img2.png", "img1.png"); sort ($bilder); echo "Standardsortierung <br>"; print_r ($bilder); natsort ($bilder); echo "<br> Sortieren mit natürlicher Reihenfolge<br>"; print_r ($bilder); ?>
Bei sort() werden die Element img10.png und img12.png vor das Element img2.png sortiert, da die Zahl 1 in der Sortierung vor der Zahl 2 kommt. Bei natsort() werden Zahlen berücksichtigt und die Zahl 2 wird vor der Zahl 10 sortiert.
Bei der Funktion natcasesort() wird die Groß- und Kleinschreibung nicht berücksichtigt. Ansonsten bei alle anderen Sortier-Funktionen komme Großbuchstaben vor Kleinbuchstaben.
Schlüssel eines Arrays sortieren
Um die Schlüssel (mit deren Werte) zu sortieren, verwendet man ksort() oder krsort() . ksort() sortiert dabei die Schlüssel aufsteigend (von a nach z) und krsort() sortiert die Schlüssel eures Arrays absteigend (von z nach a):
<?php $mitarbeiter = array( "Klaus" => "Müller", "Anna" => "Schmidt", "Lena" => "Meier"); //Array sortieren ksort($mitarbeiter); //Array ausgeben echo "Ausgabe des Arrays mittels foreach-Schleife: <br>"; foreach($mitarbeiter AS $vorname => $nachname) { echo "$vorname $nachname <br>"; } ?>