PHP
Referenzliste
usort
Array-Funktionen
Befehl:
bool usort ( array &$array, callback $cmp_function )
Parameter-Liste:
Beschreibung | |
---|---|
Das zu sortierende Array. | |
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. |
Rückgabewerte:
Gibt bei Erfolg
TRUE
zurück. Im Fehlerfall wird FALSE
zurückgegeben. Beschreibung:
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össer ist als der zweite (Ergebnis 1), der erste Wert kleiner ist als der zweite (Ergebnis -1), oder beide Werte gleich sind (Ergebnis 0).
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össer ist als der zweite (Ergebnis 1), der erste Wert kleiner ist als der zweite (Ergebnis -1), oder beide Werte gleich sind (Ergebnis 0).
Aktiv in Version:
(PHP 4, PHP 5, PHP 7)
Hinweis:
Hinweis:
Wenn zwei Elemente als gleich verglichen werden, ist ihre relative Reihenfolge im sortierten Array undefiniert.
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 Für dieses einfache Beispiel wäre die sort()-Funktion offensichtlich die bessere Wahl.Siehe auch:
• uasort()
Sortiert ein Array mittels einer benutzerdefinierten Vergleichsfunktion und behält Indexassoziationen bei
usort() - Beispiel:
Eingabe:
<?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"; } ?>
Ausgabe:
0: 1
1: 2
2: 3
3: 5
4: 6
1: 2
2: 3
3: 5
4: 6
Beschreibung:
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. |
usort() - Beispiel 2: für multidimensionale Arrays
Eingabe:
<?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"; } ?>
Ausgabe:
$fruechte[0]: Aepfel
$fruechte[1]: Orangen
$fruechte[2]: Zitronen
$fruechte[1]: Orangen
$fruechte[2]: Zitronen
Beschreibung:
Wenn ein mehrdimensionales Array sortiert wird, enthalten $a und $b Verweise auf den ersten Index des Arrays.
Beschreibung:
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. |
usort() - Beispiel 3: das die Methode eines Objekts benutzt
Eingabe:
<?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"; } ?>
Ausgabe:
b
c
d
c
d
Beschreibung:
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. |
Array-Funktionen