Forum und email
usort

usort

(PHP 3 >= 3.0.3, PHP 4, PHP 5)

usort --  Třídit pole podle hodnot pomocí uživatelsky definované porovnávací funkce

Popis

bool usort ( array &array, callback cmp_function )

Tato funkce třídí pole podle hodnot pomocí uživatelsky definované porovnávací funkce. Pokud potřebujete třídit pole podle komplikovanějších kritérií, měli byste použít tuto funkci.

Porovnávací funkce musí vrace integer menší než 0, 0, a větší než 0, pokud je první argument menší než, stejný, nebo větší než druhý argument. Pokud jsou dvě porovnávané hodnoty stejné, jejich pořadí v tříděném poli je nedefinováno.

Příklad 1. Ukázka 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";
}

Tato ukázka zobrazí:

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

Poznámka: V tomto jednoduchém případě by pochopitelně bylo vhodnější použít rsort().

Příklad 2. Ukázka usort() s vícerozměrným polem

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

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

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

Při třídění vícerozměrného pole $a a $b obsahují reference na první index pole.

Tato ukázka zobrazí:

$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons

Varování

Použitá quicksort funkce v některých C knihovnách (např. na systémech Solaris) může způsobit zhroucení PHP, pokud porovnávací funkce nevrací konsistentní hodnoty.

Viz také: uasort(), uksort(), sort(), asort(), arsort(), ksort(), natsort() a rsort().