Forum und email

usort

(PHP 4, PHP 5)

usort — Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário

Descrição

bool usort ( array &$array , string $cmp_function )

Essa função irá ordenar um array pelos valores usando uma função de classificação definida pelo usuário. Se o array precisar ser ordenado utilizando um critério não trivial, você deve usar essa função.

A função de comparação deve retornar um inteiro menor, igual ou maior que zero se o primeiro argumento for considerado respectivamente menor, igual, ou maior que o segundo.

Nota: Se dois elementos são considerados iguais, a ordem deles fica indefinida no array resultante. Até o PHP 4.0.6 as funções definidas pelo usuário manteriam a ordem original desses elementos, mas com o novo algoritmo de ordenação introduzido no 4.1.0 esse não é o caso, pois não existe solução para fazer isso de modo eficiente.

Nota: Esta função define novas chaves para os elementos em array . Ela irá remover qualquer chave que você tenha definido, ao invés de simplesmente reordenar as chaves.

Retorna TRUE em caso de sucesso ou FALSE em falhas.

Example#1 Exemplo de usort()

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

$a = array(32561);

usort($a"cmp");

foreach (
$a as $key => $value) {
    echo 
"$chave: $valor\n";
}
?>

O exemplo acima irá imprimir:

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

Nota: Obviamente que nesse caso trivial a função sort() seria mais apropriada.

Example#2 Exemplo de usort() usando um array multi-dimensional

<?php
function cmp($a$b)
{
    return 
strcmp($a["fruta"], $b["fruta"]);


$frutas[0]["fruta"] = "limoes";
$frutas[1]["fruta"] = "abacaxis";
$frutas[2]["fruta"] = "goiabas";

usort($frutas"cmp"); 

while (list(
$chave$valor) = each($frutas)) {
    echo 
"\$frutas[$chave]: " $valor["fruta"] . "\n";
}
?>

Na ordenação de um array multi-dimensional, $a e $b contém referências para o primeiro índice do array.

O exemplo acima irá imprimir:

$fruits[0]: abacaxis
$fruits[1]: goiabas
$fruits[2]: limoes

Example#3 Exemplo de usort() usando uma função membro de um objeto

<?php
class TestObj {
    var 
$name;

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

    
/* Essa é a função estática de comparação */
    
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");

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

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

O exemplo acima irá imprimir:

b
c
d

Veja também uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort(), e rsort().