usort
(PHP 3>= 3.0.3, PHP 4 , PHP 5)
usort --
Ordena um array pelos valores utilizando uma função de comparação
definida pelo usuário
Descrição
void
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.
Exemplo 1. Exemplo de usort()
<?php 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($chave, $valor) = each($a)) { echo "$chave: $valor\n"; } ?>
|
Esse exemplo mostraria:
|
Nota:
Obviamente que nesse caso trivial a função sort()
seria mais apropriada.
Exemplo 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.
Esse exemplo mostraria:
$fruits[0]: abacaxis
$fruits[1]: goiabas
$fruits[2]: limoes |
|
Exemplo 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 : -1; } }
$a[] = new TestObj("c"); $a[] = new TestObj("b"); $a[] = new TestObj("d");
usort($a, array ("TestObj", "cmp_obj"));
foreach ($a as $item) { print $item->name . "\n"; } ?>
|
Esse exemplo mostraria:
|
Veja também uasort(),
uksort(), sort(),
asort(),
arsort(),ksort(),
natsort(), e rsort().