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, portantoarsort()reorganiza o array no lugar em vez de retornar um novo. A própria função retornatrue.$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 comSORT_STRINGouSORT_NATURALusando|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
Este código produzirá a saída:
orange - 3
apple - 2
banana - 1Os 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
Este código produzirá a saída:
1 - 5
4 - 4
0 - 3
2 - 2
3 - 1O 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ção | Ordena por | Ordem | Mantém associação de chaves |
|---|---|---|---|
asort() | valor | crescente | sim |
arsort() | valor | decrescente | sim |
sort() | valor | crescente | não (reindexado) |
rsort() | valor | decrescente | não (reindexado) |
ksort() | chave | crescente | sim |
krsort() | chave | decrescente | sim |
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$sortedcomotrue. A ordenação acontece no$arrayoriginal, no lugar. - As chaves numéricas não são reindexadas. Esse é exatamente o ponto de
arsort(). Se você quiser uma sequência limpa0, 1, 2…após a ordenação, usersort(). - 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.