W3docs

Dominando arsort() em PHP: Ordenando Arrays em Ordem Decrescente por Valor

Aprenda a usar a função arsort() do PHP para ordenar arrays associativos em ordem decrescente por valor preservando as associações de chaves, com exemplos.

arsort() ordena um array associativo em ordem decrescente por valor mantendo cada valor vinculado à sua chave original. O "a" representa associativo (as associações de chaves são preservadas) e o "r" representa reverso (maior valor primeiro). Esta página aborda a sintaxe, os flags de ordenação opcionais, exemplos executáveis e como arsort() difere das demais funções de ordenação do PHP.

Use arsort() sempre que as chaves tiverem significado que você não pode perder — um mapa de nomes de produtos para preços, nomes de usuários para pontuações, ou categorias para contagens — e você quiser os maiores valores no topo.

Sintaxe

arsort(array &$array, int $flags = SORT_REGULAR): true
  • $array — o array a ser ordenado. É passado por referência, portanto arsort() reorganiza o array no lugar em vez de retornar um novo. A própria função retorna true.
  • $flags — opcional. Controla como os valores são comparados. O padrão é SORT_REGULAR.

Flags de ordenação

O argumento $flags altera como dois valores são comparados:

  • SORT_REGULAR — compara os itens normalmente, sem alterar seus tipos (o padrão).
  • SORT_NUMERIC — compara os itens como números.
  • SORT_STRING — compara os itens como strings.
  • SORT_NATURAL — compara strings usando um algoritmo de "ordem natural" (assim "img10" fica depois de "img2").
  • SORT_FLAG_CASE — combine com SORT_STRING ou SORT_NATURAL usando | para tornar a comparação de strings insensível a maiúsculas e minúsculas.

Escolher o flag correto é importante: com o SORT_REGULAR padrão, as strings numéricas "10" e "9" são comparadas numericamente, mas em um array misto os resultados podem ser surpreendentes. Use SORT_NUMERIC ou SORT_STRING explicitamente quando os tipos de valor forem conhecidos.

Ordenando um array associativo

php— editable, runs on the server

Este código produzirá a saída:

orange - 3
apple - 2
banana - 1

Os valores agora estão ordenados do maior para o menor e, de forma importante, cada nome de fruta ainda aponta para sua própria contagem — arsort() preservou o par chave/valor. É exatamente isso que o torna adequado para coisas como placar de líderes ou listas de preços.

Ordenando com um flag

php— editable, runs on the server

Este código produzirá a saída:

1 - 5
4 - 4
0 - 3
2 - 2
3 - 1

O array $numbers é ordenado em ordem decrescente por valor usando SORT_NUMERIC. Observe como as chaves numéricas originais se movem junto com seus valores em vez de serem reindexadas 0, 1, 2…. Se você não precisar preservar essas chaves, use rsort(), que renumera o array.

arsort() vs. as demais funções de ordenação

As funções de ordenação de arrays do PHP formam uma família consistente. Saber qual usar se resume a duas perguntas: ordenar por valor ou por chave? e preservar as chaves ou não?

FunçãoOrdena porOrdemMantém associação de chaves
asort()valorcrescentesim
arsort()valordecrescentesim
sort()valorcrescentenão (reindexado)
rsort()valordecrescentenão (reindexado)
ksort()chavecrescentesim
krsort()chavedecrescentesim

Portanto, arsort() é o membro "decrescente, por valor, mantendo chaves" da família — é o espelho de asort().

Armadilhas comuns

  • Ela retorna true, não o array ordenado. Escrever $sorted = arsort($array); define $sorted como true. A ordenação acontece no $array original, no lugar.
  • As chaves numéricas não são reindexadas. Esse é exatamente o ponto de arsort(). Se você quiser uma sequência limpa 0, 1, 2… após a ordenação, use rsort().
  • Comparar tipos mistos pode gerar uma ordem inesperada com SORT_REGULAR. Passe um flag explícito quando seu array misturar strings e números.
  • Para lógica de comparação personalizada (ordenar objetos, ou por uma chave calculada), use uasort(), que permite fornecer seu próprio callback de comparação enquanto preserva as chaves.

Conclusão

arsort() ordena um array em ordem decrescente por valor mantendo cada chave vinculada ao seu valor, tornando-a ideal para dados classificados com rótulos, como pontuações ou preços. Lembre-se de que ela ordena no lugar e retorna true, e escolha um flag de ordenação que corresponda aos seus tipos de dados. Quando você precisar de uma combinação diferente de ordem, chave vs. valor, ou preservação de chaves, as funções relacionadas na tabela acima cobrem todos os casos.

Prática

Prática
Qual é a funcionalidade da função arsort() em PHP?
Qual é a funcionalidade da função arsort() em PHP?
Was this page helpful?