usort

(PHP 3>= 3.0.3, PHP 4 )

usort --  tömböt rendez elemértékei alapján egy felhasználó összehasonlító függvénnyel

Leírás

void usort ( array array, string cmp_function)

Ez a függvény a cmp_function paraméterben megadott nevű felhasználói függvénnyel rendezi az array tömb elemeit. Ha a rendezendő tömböt nem szokványos feltétel alapján akarjuk rendezni, akkor használjuk ezt a függvényt.

Az összehasonlító függvénynek 0-nál kisebb vagy nagyobb ill. 0 értéket kell visszaadnia, ha az első elem kisebb vagy nagyobb a másodiknál, ill. ha egyenlők.

Megjegyzés: Ha két elem egyenlő, sorrendjük a rendezett tömbben nem definiált. A 4.0.6-os verzióig a felhasználói függvény ezen elemek eredeti sorrendjét meg tudta őrizni. A PHP 4.1.0-ban bevezetett új rendezőalgoritmus erre már nem nyújt lehetőséget, mivel nincs rá hatékony módszer.

Példa 1. usort() példa

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, $val) = each ($a)) {
    echo "$key: $value\n";
}

Ez a példa a következőt írja ki:

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

Megjegyzés: Ebben az egyszerű esetben nyilvánvalóan jobb választás az rsort() függvény használata.

Példa 2. Az usort() használata több dimenziós tömbökön

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

$gyumolcsok[0]["gyumolcs"] = "citrom";
$gyumolcsok[1]["gyumolcs"] = "alma";
$gyumolcsok[2]["gyumolcs"] = "szőlő";

usort($gyumolcsok, "cmp");

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

Több dimenziós tömbökre alkalmazva $a és $b az első indexre mutató referenciákat fog tartalmazni.

Ez a példa a következőt írja ki:

$gyumolcsok[0]: alma
$gyumolcsok[1]: citrom
$gyumolcsok[2]: szőlő

Megjegyzés: A függvény neve helyett egy tömböt is átadhatsz, ami egy objektum referenciát és egy metódus nevet kell tartalmazzon.

Példa 3. Objektum tagfüggvényének (metódus) használata az usort()-tal

class TestObj {
    var $nev;

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

    /* ez statikus összehasonlító függvény: */
    function cmp_obj($a, $b)
    {
        $al = strtolower($a->nev);
        $bl = strtolower($b->nev);
        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 $elem) {
    print $elem->nev."\n";
}

Ez a példa a következőt írja ki:

b
c
d

Figyelem

Néhány C könyvtárban (mint például a Solaris rendszerekben) a gyorsrendezés alapjául szolgáló függvény a PHP összeomlását okozhatja, ha az összehasonlító függvény nem következetes értéket ad vissza.

Lásd még: uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort() és rsort()!