Hier wird zuerst ein Array mit Zahlenwerten erzeugt. Um diese Zahlen zu sortieren,
würde auch die sort() Funktion genügen. Hier wird jedoch usort() angewendet,
weil man damit auch assoziative und mehrdimensionale Arrays sortieren kann. Ausnahmsweise
mal ein Zitat aus SELFPHP
Die Funktion usort() sortiert ein assoziatives Array (array) nach den Werten seiner
Elemente auf Basis der Reihenfolge, die von einer benutzerdefinierten Funktion
(cmp_function) vorgegeben wird. Die Zuordnung von Schlüssel und Wert bleibt
nicht erhalten, ein vorher assoziatives Array wird in ein numerisch indiziertes
Array umgewandelt. Die Funktion cmp_function bekommt jeweils zwei Werte aus dem
Array übergeben und muss durch ihr Ergebnis bekannt geben, ob der erste Wert
größer ist als der zweite (Ergebnis 1), der erste Wert kleiner ist
als der zweite (Ergebnis -1), oder beide Werte gleich sind (Ergebnis 0). Siehe
dazu auch den trinären Bedingungsoperator einer if
Struktur
Ich will es mal mit meinen Worten versuchen. Die Funktion usort() erwartet als erstes Argument, den Namen des Arrays und als zweites Argument eine benutzerdefinierte Sortierfunktion, die bestimmt wie jeweils 2 Elemente sortiert werden. In diesem Beispiel die Funktion namens sortiere(). Die Sortierfunktion hat 2 Argumente. Die beiden Argumente bekommen jeweils 2 Elemente des Arrays. Diese werden miteinander verglichen. Sind beide gleich, gibt die Sortierfunktion den Wert 0 zurück. Ist das erste Argument größer als das zweite, wird der Wert 1 zurückgeben, andernfalls der Wert -1. Siehe dazu auch meinen Flashtipps, auf den letzten Seiten des swf Beispiels wird die sort() Funktion erklärt.
|
1 12 23 24 47 49 56 72 88 90 |
<?php $zahl =array(1,23,49,47,90,24,12,56,88,72); function sortiere($m, $n) { $u=0; |
Bevor unten das mehrdimensionale Array sortiert wird, noch eine Änderung
in der Sortier Funktion. Mit strnatcasecmp()
kann man Zeichenketten (str1 und str2) nach einer natürlichen Sortierreihenfolge
vergleichen. Hier ist 10 größer als 2, (im Gegensatz zu einem herkömmlichen
String Vergleich wo das erste Zeichen 1 kleiner ist als 2).
Folgende Werte werden zurückgegeben.
| Wert | Bedingung |
| < 0 | str1 ist kleiner als str2 |
| = 0 | str1 ist gleich str2 |
| > 0 | str1 ist größer als str2 |
| function sortier_funktion($a, $b) { return strnatcasecmp($a["Hits"],$b["Hits"]); } |
| function sortier_funktion($a, $b) { if ($a["Hits"] == $b["Hits"]) return 0; return ($a["Hits"] > $b["Hits"]) ? 1 : -1; } |
|
20 / Friedel Wachsmann 35 / Dieter Grünschuber 40 / Gunter Freihorn 49 / Walter Gamshuber 54 / Klaus Grabenrot |
<?php $id{0} = array("Name" => "Walter Gamshuber", "Hits" => 49); $id{1} = array("Name" => "Friedel Wachsmann", "Hits" => 20); $id{2} = array("Name" => "Gunter Freihorn", "Hits" => 40); $id{3} = array("Name" => "Dieter Grünschuber", "Hits" => 35); $id{4} = array("Name" => "Klaus Grabenrot", "Hits" => 54); usort($id, sortier_funktion); function sortier_funktion($a, $b) { $i=0; |