Array Funktionen
PHP Manual

usort

(PHP 4, PHP 5)

usort — Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion

Beschreibung

bool usort ( array &$array , callable $value_compare_func )

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

Parameter-Liste

array

Das zu sortierende Array.

value_compare_func

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.

int callback ( mixed $a, mixed $b )
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.

Beispiele

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

Siehe auch


Array Funktionen
PHP Manual