Manual do PHP
Anterior |  | Próxima

# 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:

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

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

    b
    c
    d

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

Anterior | Principal | Próxima
uksort | Acima | Aspell [obsoleta]