Werbung
usort
(PHP 4, PHP 5)
usort — Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion
Beschreibung
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
Parameter-Liste
- array
-
Das zu sortierende Array.
- cmp_function
-
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.
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Changelog
| 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. |
Beispiele
2
3
4
5
6
7
8
9
10
11
12
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.
2
3
4
5
6
7
8
9
10
11
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
Siehe auch
- uasort() - Sortiert ein Array mittels einer benutzerdefinierten Vergleichsfunktion und behält Indexassoziationen bei
- Den Vergleich von Arraysortierungsfunktionen