W3docs

sort()

Aprenda as funções de ordenação de arrays em PHP: sort(), asort(), ksort(), usort() e suas variantes, com exemplos práticos.

Introdução

Ordenar é uma das operações mais comuns que você realiza com arrays: organizar uma lista de preços, alfabetizar nomes, classificar pontuações. O PHP vem com uma família inteira de funções de ordenação, e a que você escolhe depende de duas perguntas — ordenar por valor ou por chave? e é necessário manter as chaves originais?

Este capítulo explica sort() e suas funções relacionadas, mostra a saída de cada uma e ajuda você a escolher a função certa da primeira vez.

Entendendo a Ordenação de Arrays em PHP

As funções de ordenação de arrays do PHP modificam o array no lugar (por referência) e retornam true em caso de sucesso ou false em caso de falha — elas não retornam um novo array ordenado. Portanto, você sempre escreve sort($arr);, nunca $arr = sort($arr);.

As funções seguem um padrão de nomenclatura previsível:

FunçãoOrdena porMantém associações de chaves?Ordem
sort()valorNão (reindexa 0,1,2…)crescente
rsort()valorNãodecrescente
asort()valorSimcrescente
arsort()valorSimdecrescente
ksort()chaveSimcrescente
krsort()chaveSimdecrescente
usort()personalizado (valor)Nãopersonalizado
uasort()personalizado (valor)Simpersonalizado
uksort()personalizado (chave)Simpersonalizado

O padrão é fácil de ler assim que você o conhece: um a no início significa "manter Associações de chave", um k significa "ordenar por Chave", um r significa "Reverso", e um u significa "comparação definida pelo Usuário".

sort()

A função sort() ordena um array em ordem crescente por valor. É a escolha certa para arrays indexados simples (no estilo lista) onde você não se importa com as chaves originais — e aí está o detalhe: sort() descarta as chaves existentes e reindexa a partir de 0. Nunca a use em um array associativo que você queira manter intacto.

$numbers = [3, 1, 2];
sort($numbers);
print_r($numbers);

Saída:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

Também funciona com strings, comparando-as em ordem alfabética:

$fruits = ["banana", "apple", "cherry"];
sort($fruits);
print_r($fruits);
// Array ( [0] => apple [1] => banana [2] => cherry )

Você pode substituir a regra de comparação com o segundo argumento opcional flags — por exemplo SORT_NUMERIC, SORT_STRING, ou SORT_NATURAL (que ordena "img10" após "img2" como um humano faria).

asort()

A função asort() ordena por valor em ordem crescente, mas preserva a associação chave-valor. Use-a quando as chaves têm significado — como um mapa de nomes para pontuações.

$scores = ['Alice' => 85, 'Bob' => 92, 'Charlie' => 78];
asort($scores);
print_r($scores);

Saída (as linhas são reordenadas, mas cada nome mantém sua pontuação):

Array
(
    [Charlie] => 78
    [Alice] => 85
    [Bob] => 92
)

Compare isso com sort($scores), que teria substituído Charlie/Alice/Bob por 0/1/2 e perdido os nomes completamente.

ksort()

A função ksort() ordena um array pelas suas chaves em ordem crescente, mantendo cada chave com seu valor. É útil quando as chaves são IDs, datas ou rótulos que você quer em ordem.

$data = ['c' => 3, 'a' => 1, 'b' => 2];
ksort($data);
print_r($data);

Saída:

Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)

usort() e uasort()

Quando as ordenações integradas não são suficientes — ordenar objetos, ordenar por um campo aninhado, ou aplicar regras de negócios — passe sua própria função de comparação. usort() ordena um array regular (reindexando as chaves), enquanto uasort() faz o mesmo, mas preserva as chaves.

O callback de comparação recebe dois elementos e deve retornar um inteiro: negativo se o primeiro deve vir antes do segundo, positivo se depois, e zero se forem iguais. O operador spaceship <=> retorna exatamente isso, por isso é a escolha idiomática.

$people = [
    ['name' => 'Alice', 'age' => 30],
    ['name' => 'Bob',   'age' => 25],
    ['name' => 'Carol', 'age' => 35],
];

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

foreach ($people as $p) {
    echo $p['name'] . ": " . $p['age'] . "\n";
}

Saída:

Bob: 25
Alice: 30
Carol: 35

Para ordenar em ordem decrescente, troque os operandos: return $b['age'] <=> $a['age'];.

Ordem Decrescente

Para inversão simples da ordem, use as variantes com prefixo r em vez de escrever um callback personalizado: rsort() (por valor, reindexa), arsort() (por valor, mantém chaves), e krsort() (por chave, mantém chaves).

$numbers = [3, 1, 2];
rsort($numbers);
print_r($numbers);
// Array ( [0] => 3 [1] => 2 [2] => 1 )

Se você precisar de ordenação alfanumérica "amigável para humanos", veja natsort(), que ordena ["img12", "img2"] como img2, img12 em vez da ordem ASCII estrita img12, img2.

Aplicações Práticas da Ordenação de Arrays em PHP

A ordenação de arrays em PHP tem diversas aplicações práticas, incluindo:

Ordenação de Arrays de Preços de Produtos

Ao construir um site de e-commerce, pode ser necessário ordenar produtos com base em seus preços. Usando as funções de ordenação de arrays do PHP, você pode ordenar um array de preços de produtos em ordem crescente ou decrescente, permitindo que os clientes filtrem produtos por faixa de preço.

Ordenação de Arrays de Registros de Banco de Dados

Ao recuperar dados de um banco de dados, pode ser necessário ordenar os registros com base em critérios específicos, como data, hora ou ordem alfabética. Usando as funções de ordenação de arrays do PHP, você pode ordenar os registros do banco de dados após recuperá-los, facilitando a análise dos dados.

Ordenação de Arrays de Entrada do Usuário

Ao coletar dados de entrada do usuário, pode ser necessário ordenar os dados com base em critérios específicos, como idade ou localização. Usando as funções de ordenação de arrays do PHP, você pode ordenar os dados de entrada do usuário em ordem crescente ou decrescente, facilitando a exibição dos dados para outros usuários.

Conclusão

Escolher a ordenação certa se resume a duas perguntas: você está ordenando por valor ou por chave, e precisa manter as chaves originais? Use sort()/rsort() para listas simples, asort()/arsort() e ksort()/krsort() quando as chaves importam, e usort()/uasort() quando precisar de regras personalizadas. Como todas essas funções ordenam no lugar e retornam um boolean, lembre-se de chamá-las como instruções — não de atribuir seu resultado de volta ao array.

Prática

Prática
Quais destas são formas corretas de ordenar um array em PHP?
Quais destas são formas corretas de ordenar um array em PHP?
Was this page helpful?