usort

(PHP 3>= 3.0.3, PHP 4 )

usort --  Zoradiť pole podľa hodnôt pomocou užívateľom definovanej porovnávacej funkcie

Popis

void usort ( array pole, callback cmp_funkcia)

Táto funkcia zoradí pole podľa hodnôt pomocou užívateľskej porovnávacej funkcie. Ak sa pole, ktoré chcete zoradiť, má zoradiť podľa nejakého zložitého kritéria, mali by ste túto funkciu použiť.

Porovnávacia funkcia musí vrátiť integer menší ako, rovný alebo väčší ako nula, ak sa prvý argument považuje jednoznačne za menší ako, rovný alebo väčší ako druhý.

Poznámka: Ak sa dva členy porovnávajú ako zhodné, ich poradie v zoradenom poli nie je definované. Až po PHP 4.0.6 by si užívateľom definované funkcie mali pre tieto prvky ponechať pôvodné poradie, ale s novým zoraďovacím algoritmom predstaveným v 4.1.0 tomu už tak nie je, pretože neexistuje, ako to urobiť efektívnym spôsobom.

Príklad 1. usort() príklad

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";
}

Tento príklad by zobrazil:

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

Poznámka: Nepochybne v tomto triviálnom prípade by bola funkcia rsort() vhodnejšia.

Príklad 2. usort() príklad pomocou multi-dimenzionálneho poľa

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

$fruits[0]["fruit"] = "citrony";
$fruits[1]["fruit"] = "jablka";
$fruits[2]["fruit"] = "grepy";

usort($fruits, "cmp");

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

Pri triedení multi-dimenzionálneho poľa, $a a $b obsahujú odkazy na prvý index poľa.

Tento príklad by zobrazil:

$fruits[0]: jablka
$fruits[1]: grepy
$fruits[2]: citrony

Príklad 3. usort() príklad pomocou funkcie člena objektu

class TestObj {
    var $name;

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

    /* Toto je staticky porovnávajúcia funkcia: */
    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";
}

Tento príklad by zobrazil:

b
c
d

Tiež pozri uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort() a rsort().