Forum und email

usort

(PHP 4, PHP 5)

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

Popis

bool 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ý.

Note: 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.

Vracia TRUE pri úspechu alebe FALSE pri chybe.

Example#1 usort() príklad

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

$a = array(32561);

usort($a"cmp");

while (list(
$key$value) = each($a)) {
    echo 
"$key: $value\n";
}
?>

Tento príklad by zobrazil:

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

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

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

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

Example#3 usort() príklad pomocou funkcie člena objektu

<?php
class TestObj {
    var 
$name;

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

    
/* Toto je staticky porovnavajucia funkcia: */
    
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");

uasort($a, array ("TestObj""cmp_obj"));

foreach (
$a as $item) {
    echo 
$item->name."\n";
}
?>

Tento príklad by zobrazil:

b
c
d

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