Arrays sortieren
usort(array, cmp_function)

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) {
if ($m == $n) return 0;
return ($m > $n) ? 1 : -1;
}

usort($zahl, sortiere);

$u=0;
while($u<10){
echo $zahl[$u]."<br>";
$u++;
}
?>

strnatcasecmp()

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
Hier die function sortier_funktion(){} auf 2 Arten, die das gleiche bewirken,
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;
}
Doch nun zum mehrdimensionalen Array, in Form einer Highscoreliste.
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) {
return strnatcasecmp($a["Hits"],$b["Hits"]);
}

$i=0;
while($i<5){
echo $id[$i]["Hits"]." / ".$id[$i]["Name"]."<br>";
$i++;
}
?>

hier ein praktisches Beispiel zum Thema
Flash Highscoreliste

Webdesign / PHP / mySQL / Dreamweaver MX Tipps
Copyright © Michael Albers
www.pastorpixel.de
www.pastorpixel.de PHP mySQL Tipps