usort
(PHP 4, PHP 5)
usort — Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário
Descrição
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 : 1;
}
$a = array(3, 2, 5, 6, 1);
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 : -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().