(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 relative 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
array
Das zu sortierende Array.
cmp_function
Die Vergleichsfunktion muss einen Integer kleiner als, gleich oder größer als Null zurückgeben, wenn das erste Argument respektive kleiner, gleich oder größer als das zweite ist.
Gibt bei Erfolg TRUE
zurück. Im Fehlerfall wird FALSE
zurückgegeben.
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
Beispiel #4 usort() Beispiel zum Einsatz einer Closure zum Sortieren eines mehrdimensionalen Arrays
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
y, a x, b z, c