(PHP 4, PHP 5)
usort — Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion
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.
Hinweis: Wenn zwei Elemente als gleich verglichen werden, ist ihre Reihenfolge im sortierten Array undefiniert.
Hinweis: Diese Funktion weist den Elementen des Arrays array neue Schlüssel zu. Bestehende Schlüssel, die Sie eventuell zugewiesen haben, werden entfernt statt einfach nur die Schlüssel neu anzuordnen
Das zu sortierende Array.
Die Vergleichsfunktion muss einen Integerwert kleiner als, gleich oder größer als 0 zurückgeben je nachdem ob das erste übergebene Argument kleiner als, gleich oder größer als das zweite ist.
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.
Version | Beschreibung |
---|---|
4.1.0 | Es wurde ein neuer Sotieralgorithmus eingeführt, die Reihenfolge von Elementen die von cmp_function als gleich bewertet wurden bleibt nun nicht mehr erhalten. |
Beispiel #1 usort()-Beispiel
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
0: 1 1: 2 2: 3 3: 5 4: 6
Hinweis: Für dieses einfache Beispiel wäre die sort()-Funktion offensichtlich die bessere Wahl.
Beispiel #2 usort()-Beispiel für multidimensionale Arrays
<?php
function cmp($a, $b)
{
return strcmp($a["frucht"], $b["frucht"]);
}
$fruechte[0]["frucht"] = "Zitronen";
$fruechte[1]["frucht"] = "Aepfel";
$fruechte[2]["frucht"] = "Orangen";
usort($fruechte, "cmp");
while (list($key, $value) = each($fruits)) {
echo "\$fruechte[$key]: " . $value["frucht"] . "\n";
}
?>
Wenn ein mehrdimensionales Array sortiert wird, enthalten $a und $b Verweise auf den ersten Index des Arrays.
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
$fruechte[0]: Aepfel $fruechte[1]: Orangen $fruechte[2]: Zitronen
Beispiel #3 usort()-Beispiel, das die Methode eines Objekts benutzt
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Dies ist die statische Vergleichsfunktion */
static 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");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
echo $item->name . "\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
b c d