usort
(PHP 4, PHP 5)
usort — tömböt rendez elemértékei alapján egy felhasználó összehasonlÃtó függvénnyel
LeÃrás
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.
Note: 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.
Example#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
Note: Ebben az egyszerű esetben nyilvánvalóan jobb választás az rsort() függvény használata.
Example#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ő
Note: A függvény neve helyett egy tömböt is átadhatsz, aminek egy objektum referenciát és egy metódus nevet kell tartalmaznia.
Example#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
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()!