W3docs

Ordenação de Arrays

Aprenda a ordenar arrays em PHP usando sort(), rsort(), asort(), ksort(), natsort() e usort() com exemplos práticos.

Introdução à Ordenação de Arrays em PHP

Um array em PHP é uma coleção de elementos armazenados e acessados por um índice (uma posição numérica) ou uma chave (um rótulo). Ordenar significa reorganizar esses elementos em uma ordem definida — crescente, decrescente, por valor, por chave ou pela sua própria regra.

Esta página aborda as funções de ordenação integradas do PHP, como cada uma delas se comporta e — igualmente importante — qual delas usar dependendo de se você se preocupa com chaves, valores ou uma ordem personalizada.

Como as funções de ordenação diferem

Duas perguntas determinam qual função você precisa:

  1. Ordenar por valor ou por chave? Listas simples (arrays indexados) são ordenadas por valor; arrays associativos podem ser ordenados por qualquer um dos dois.
  2. Manter a associação chave→valor? sort()/rsort() descartam as chaves originais e reindexam a partir de 0. As famílias a* e k* preservam a associação.
FunçãoOrdena porOrdemMantém chaves?
sort()valorcrescentenão (reindexado)
rsort()valordecrescentenão (reindexado)
asort()valorcrescentesim
arsort()valordecrescentesim
ksort()chavecrescentesim
krsort()chavedecrescentesim
usort()valor (personalizado)sua regranão (reindexado)
uasort()valor (personalizado)sua regrasim
uksort()chave (personalizado)sua regrasim

Todas essas funções ordenam o array no próprio lugar (elas mutam a variável que você passa) e retornam true em caso de sucesso, em vez de um novo array — um ponto de confusão comum para iniciantes.

Ordenando Arrays em Ordem Crescente

A função sort() ordena um array em ordem crescente: strings em ordem alfabética, números em ordem numérica. Ela modifica o array original no lugar e o reindexa a partir de 0, portanto qualquer chave original é perdida. Evite misturar tipos de dados em um array, pois comparações entre strings e números, por exemplo, podem produzir resultados surpreendentes.

$fruits = ['lemon', 'orange', 'banana', 'apple'];
sort($fruits);
print_r($fruits);
// Output: Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )

Ordenando Arrays em Ordem Decrescente

A função rsort() é o inverso de sort() — ela ordena os elementos do maior para o menor. Assim como sort(), funciona no lugar e reindexa o array.

$numbers = [5, 2, 9, 1, 7];
rsort($numbers);
print_r($numbers);
// Output: Array ( [0] => 9 [1] => 7 [2] => 5 [3] => 2 [4] => 1 )

Ordenando Arrays Associativos por Valor

Quando as chaves têm significado (nomes, IDs, rótulos), use as funções a* para que os pares chave→valor permaneçam juntos. A função asort() ordena por valor em ordem crescente; arsort() faz o mesmo em ordem decrescente.

$ages = ['Peter' => 35, 'John' => 28, 'Mary' => 32];
asort($ages);
print_r($ages);
// Output: Array ( [John] => 28 [Mary] => 32 [Peter] => 35 )

Observe que cada nome permanece vinculado à sua idade — essa é a diferença em relação a sort(), que descartaria os nomes.

Ordenando Arrays Associativos por Chave

A função ksort() ordena por chave em ordem crescente, mantendo cada chave vinculada ao seu valor; krsort() ordena por chave em ordem decrescente.

$colors = ['red' => '#FF0000', 'blue' => '#0000FF', 'green' => '#008000'];
ksort($colors);
print_r($colors);
// Output: Array ( [blue] => #0000FF [green] => #008000 [red] => #FF0000 )

Ordenação em Ordem Natural

Uma ordenação de string comum compara caractere por caractere, então 'img10' é ordenado antes de 'img2' (porque '1' < '2'). A função natsort() usa um algoritmo de "ordem natural" que compara números incorporados como números — da forma como um humano ordenaria nomes de arquivos. Ela preserva as chaves.

$files = ['img12.png', 'img10.png', 'img2.png', 'img1.png'];
natsort($files);
print_r($files);
// Output: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

Use natcasesort() para o mesmo comportamento, ignorando maiúsculas/minúsculas.

Ordenação Personalizada com usort()

Quando as ordens integradas não são suficientes — para ordenar objetos, arrays multidimensionais ou por um valor derivado — usort() permite que você forneça sua própria função de comparação. O callback recebe dois elementos e deve retornar um número negativo, 0 ou um número positivo dependendo se o primeiro deve vir antes, igual ou após o segundo.

$people = [
    ['name' => 'Mary', 'age' => 32],
    ['name' => 'Peter', 'age' => 35],
    ['name' => 'John', 'age' => 28],
];

usort($people, function ($a, $b) {
    return $a['age'] <=> $b['age']; // spaceship operator: ascending by age
});

foreach ($people as $person) {
    echo $person['name'] . ': ' . $person['age'] . "\n";
}
// Output:
// John: 28
// Mary: 32
// Peter: 35

O operador "nave espacial" <=> retorna exatamente os valores -1 / 0 / 1 que o callback precisa, o que o torna a escolha idiomática aqui. Se você precisar manter as chaves, use uasort(); para ordenar por uma regra de chave personalizada, use uksort().

Escolhendo a Função Certa

  • Lista simples, sem preocupação com chaves → sort() / rsort().
  • Array associativo, ordenar por valor, manter chaves → asort() / arsort().
  • Array associativo, ordenar por chave → ksort() / krsort().
  • Nomes de arquivos ou strings semelhantes a versões → natsort() / natcasesort().
  • Objetos, arrays aninhados ou qualquer regra personalizada → usort() / uasort() / uksort().

Se você só precisa inverter a ordem existente sem reordenar, array_reverse() é mais eficiente do que uma ordenação completa. Para ordenar vários arrays juntos ou por várias colunas, consulte array_multisort().

Conclusão

O PHP oferece um conjunto completo de ferramentas para ordenar arrays, e a escolha certa resume-se a duas perguntas: você está ordenando por valor ou por chave, e precisa manter as chaves associadas? sort() e rsort() lidam com listas simples, as famílias a*/k* lidam com dados associativos, natsort() lida com ordenação amigável para humanos, e a família u* lida com qualquer coisa personalizada. Lembre-se de que todas essas funções ordenam no lugar e retornam um boolean — não um novo array.

Prática

Prática
Quais das seguintes são funções de ordenação integradas válidas em PHP?
Quais das seguintes são funções de ordenação integradas válidas em PHP?
Was this page helpful?