PHP Handbuch
Zurück |  | Nach vorne

# usort

(3.0.3 - 3.0.18 only, PHP 4 >= 4.0.0)

usort -- Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion.

## Beschreibung

``void usort` (array array, string cmp_function)`

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.

Die Vergleichsfunktion muss einen Integer zurückgeben, der kleiner, gleich, oder größer ist als `NULL`, wenn für das erste Argument auch angenommen wird, dass es kleiner, gleich, oder größer ist als das zweite. Sind zwei Elemente gleich, ist deren Reihenfolge nicht definiert.

Es ist auch möglich, eine Member Funktion eines Objektes als Vergleichsfunktion zu verwenden. Siehe das nachstehende Beispiel Nummer 3.

Beispiel 1. usort()
    function cmp ($a, $b) {
        if ($a == $b) return 0;
        return ($a > $b) ? -1 : 1;
    }

    $a = array (3, 2, 5, 6, 1);

    usort ($a, "cmp");

    while (list ($key, $value) = each ($a)) {
        echo "$key: $value\n";
    }

Dieses Beispiel würde folgendes anzeigen:

    0: 6
    1: 5
    2: 3
    3: 2
    4: 1

> Anmerkung: Offensichtlich würde rsort() für diesen einfachen Fall besser passen.

Beispiel 2. usort() Beispiel mit einem mehrdimensionalen Array
    function cmp ($a, $b) {
        return strcmp($a["fruit"], $b["fruit"]);
    }

    $fruits[0]["fruit"] = "Zitronen";
    $fruits[1]["fruit"] = "Äpfel";
    $fruits[2]["fruit"] = "Trauben";

    usort($fruits, "cmp");

    while (list ($key, $value) = each ($fruits)) {
        echo "\$fruits[$key]: " . $value["fruit"] . "\n";
    }

Wird ein mehrdimensionales Array sortiert, enthalten $a und $b Referenzen zu dem ersten Index des Arrays.

Dieses Beispiel würde folgendes anzeigen:

    $fruits[0]: Äpfel
    $fruits[1]: Trauben
    $fruits[2]: Zitronen

Beispiel 3. usort() mit Verwendung einer Member Funktion eines Objektes
    class TestObj {
        var $name;

        function TestObj($name)
        {
            $this->name = $name;
        }

        /* Dies ist die statische Vergleichsfunktion: */
        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");

    uasort($a, array ("TestObj", "cmp_obj"));

    foreach ($a as $item) {
        print $item->name."\n";
    }

Dieses Beispiel würde folgendes anzeigen:

    b
    c
    d

Warnung
Die zugrundeliegende quicksort Funktion in machen C Bibliotheken (wie z.B. Solaris Systeme) könnte einen PHP Crash verursachen, wenn die Vergleichsfunktion keine gleichbleibenden Werte zurückgibt.

Siehe auch: uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort() und rsort().

Zurück | Zum Anfang | Nach vorne
uksort | Nach oben | Aspell Funktionen [veraltet]