Forum und email

usort

(PHP 4, PHP 5)

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

Beschreibung

bool usort ( array &$array , callback $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.

Hinweis: Sind zwei Elemente gleich, ist deren Reihenfolge nicht definiert. Bis zu PHP 4.0.6 würde die benutzerdefinierte Funktion die originäre Reihenfolge beibehalten, doch seit der Einführung des neuen Sortieralgorhythmus mit 4.1.0 ist dies nicht mehr der Fall, da es keine effiziente Lösung dafür gibt.

Hinweis: This function assigns new keys for the elements in array . It will remove any existing keys you may have assigned, rather than just reordering the keys.

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Example#1 usort()

<?php
function cmp($a$b)
{
    if (
$a == $b) {
        return 
0;
    }
    return (
$a $b) ? -1;
}



$a = array(32561);

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: Offensichtlich würde sort() für diesen einfachen Fall besser passen.

Example#2 usort() mit einem mehrdimensionalen Array

<?php
function cmp($a$b) {
    return 
strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "Zitrone";
$fruits[1]["fruit"] = "Apfel";
$fruits[2]["fruit"] = "Traube";

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.

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

$fruits[0]: Apfel
$fruits[1]: Traube
$fruits[2]: Zitrone

Example#3 usort() mit Verwendung einer Member Funktion eines Objektes

<?php
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;
    }
}

$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(), uksort(), sort(), asort(), arsort(),ksort(), natsort() und rsort().