Beschreibung
void
usort ( array array, string cmp_function)
Diese Funktion sortiert ein Array nach seinen Werten mittels
einer benutzerdefinierten Vergleichsfunktion. Soll das Array nach
nicht trivialen Kriterien sortiert werden, sollten Sie diese
Funktion verwenden.
Die Vergleichsfunktion muss einen Integer zurückgeben, der
kleiner, gleich, oder größer ist als NULL, wenn für das erste
Argument auch angenommen wird, dass es kleiner, gleich, oder
größer ist als das zweite.
Anmerkung:
Sind zwei Elemente gleich, ist deren Reihenfolge nicht definiert. Bis zu
PHP 4.0.6 würde die benutzerdefinierte Funktion die originäre Reihenfolge
beibehalten, doch seit der Einführung des neuen Sortieralgorhythmus mit
4.1.0 ist dies nicht mehr der Fall, da es keine effiziente Lösung dafür
gibt.
Beispiel 1. usort() function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array (3, 2, 5, 6, 1);
usort ($a, "cmp");
while (list ($key, $value) = each ($a)) {
echo "$key: $value\n";
} |
|
Dieses Beispiel würde folgendes anzeigen:
Anmerkung:
Offensichtlich würde rsort() für diesen
einfachen Fall besser passen.
Beispiel 2.
usort() Beispiel mit einem mehrdimensionalen
Array
function cmp ($a, $b) {
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "Zitronen";
$fruits[1]["fruit"] = "Äpfel";
$fruits[2]["fruit"] = "Trauben";
usort($fruits, "cmp");
while (list ($key, $value) = each ($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
} |
|
Wird ein mehrdimensionales Array sortiert, enthalten $a und $b
Referenzen zu dem ersten Index des Arrays.
Dieses Beispiel würde folgendes anzeigen:
$fruits[0]: Äpfel
$fruits[1]: Trauben
$fruits[2]: Zitronen |
Anmerkung: Anstelle eines Funktionsnamens kann auch
ein Array mit einer Objekt-Referenz und dem Namen einer Methode angegeben werden.
Beispiel 3.
usort() mit Verwendung einer Member Funktion eines Objektes
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Dies ist die statische Vergleichsfunktion: */
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) return 0;
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
uasort($a, array ("TestObj", "cmp_obj"));
foreach ($a as $item) {
print $item->name."\n";
} |
|
Dieses Beispiel würde folgendes anzeigen:
Warnung |
Die zugrundeliegende quicksort Funktion in machen C
Bibliotheken (wie z.B. Solaris Systeme) könnte einen PHP Crash
verursachen, wenn die Vergleichsfunktion keine gleichbleibenden
Werte zurückgibt.
|
Siehe auch uasort(),
uksort(), sort(),
asort(),
arsort(),ksort(),
natsort() und rsort().