Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

usort

Array-Funktionen

    Befehl:
bool usort ( array &$array, callback $cmp_function )


    Parameter-Liste:
NameBeschreibung
arrayDas zu sortierende Array.
cmp_functionDie 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.
Achtung:
Werden von der Vergleichsfunktion nicht-integer Werte zurückgegeben so werden diese auf integer gecastet. Gibt die Funktion zB. float Werte zurück so werden Werte wie 0.99 oder 0.1 zu 0 und die verglichenen Werte werden als gleich angesehen.

    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).


    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:
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

Beschreibung:
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.
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

Beschreibung:
Wenn ein mehrdimensionales Array sortiert wird, enthalten $a und $b Verweise auf den ersten Index des Arrays.

Beschreibung:
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.
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

Beschreibung:
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.
Array-Funktionen