Dominando arsort() en PHP: Ordenar Arrays en Orden Descendente por Valor
Aprende a usar arsort() de PHP para ordenar arrays asociativos en orden descendente por valor conservando las asociaciones de claves, con ejemplos.
arsort() ordena un array asociativo en orden descendente por valor manteniendo cada valor ligado a su clave original. La "a" viene de associative (se conservan las asociaciones de claves) y la "r" viene de reverse (el valor más grande primero). Esta página cubre su sintaxis, los indicadores de ordenación opcionales, ejemplos ejecutables y cómo arsort() se diferencia de las demás funciones de ordenación de PHP.
Usa arsort() siempre que las claves tengan un significado que no debes perder — un mapa de nombres de productos a precios, nombres de usuario a puntuaciones o categorías a recuentos — y quieras los valores más altos al principio.
Sintaxis
arsort(array &$array, int $flags = SORT_REGULAR): true$array— el array a ordenar. Se pasa por referencia, por lo quearsort()reordena el array en su lugar en vez de devolver uno nuevo. La función en sí devuelvetrue.$flags— opcional. Controla cómo se comparan los valores. Por defecto esSORT_REGULAR.
Indicadores de ordenación
El argumento $flags cambia cómo se comparan dos valores:
SORT_REGULAR— compara los elementos de forma normal, sin cambiar sus tipos (el valor por defecto).SORT_NUMERIC— compara los elementos como números.SORT_STRING— compara los elementos como strings.SORT_NATURAL— compara strings usando un algoritmo de "orden natural" (de modo que"img10"se ordena después de"img2").SORT_FLAG_CASE— combínalo conSORT_STRINGoSORT_NATURALusando|para que la comparación de strings no distinga entre mayúsculas y minúsculas.
Elegir el indicador correcto es importante: con el SORT_REGULAR predeterminado, los strings numéricos "10" y "9" se comparan numéricamente, pero en un array mixto los resultados pueden ser sorprendentes. Usa SORT_NUMERIC o SORT_STRING de forma explícita cuando los tipos de valores sean conocidos.
Ordenar un array asociativo
Este código generará la siguiente salida:
orange - 3
apple - 2
banana - 1Los valores ahora están ordenados de mayor a menor y, de forma fundamental, cada nombre de fruta sigue apuntando a su propio recuento — arsort() conservó el par clave/valor. Esto es exactamente lo que lo hace adecuado para cosas como tablas de clasificación o listas de precios.
Ordenar con un indicador
Este código generará la siguiente salida:
1 - 5
4 - 4
0 - 3
2 - 2
3 - 1El array $numbers se ordena en orden descendente por valor usando SORT_NUMERIC. Fíjate cómo las claves numéricas originales se mueven junto con sus valores en lugar de reindexarse 0, 1, 2…. Si no necesitas conservar esas claves, usa rsort(), que vuelve a numerar el array.
arsort() vs. las demás funciones de ordenación
Las funciones de ordenación de arrays de PHP forman una familia coherente. Saber cuál usar se reduce a dos preguntas: ¿ordenar por valor o por clave? y ¿conservar las claves o no?
| Función | Ordena por | Orden | Conserva la asociación de claves |
|---|---|---|---|
asort() | valor | ascendente | sí |
arsort() | valor | descendente | sí |
sort() | valor | ascendente | no (reindexado) |
rsort() | valor | descendente | no (reindexado) |
ksort() | clave | ascendente | sí |
krsort() | clave | descendente | sí |
Así, arsort() es el miembro "descendente, por valor, conserva claves" de la familia — es la imagen especular de asort().
Errores comunes
- Devuelve
true, no el array ordenado. Escribir$sorted = arsort($array);asignatruea$sorted. La ordenación ocurre sobre el$arrayoriginal en su lugar. - Las claves numéricas no se reindexan. Ese es el objetivo de
arsort(). Si quieres una secuencia limpia0, 1, 2…tras la ordenación, usarsort(). - Comparar tipos mixtos puede dar un orden inesperado con
SORT_REGULAR. Pasa un indicador explícito cuando tu array mezcle strings y números. - Para lógica de comparación personalizada (ordenar objetos o por una clave calculada) recurre a
uasort(), que te permite proporcionar tu propia función de comparación conservando las claves.
Conclusión
arsort() ordena un array en orden descendente por valor manteniendo cada clave vinculada a su valor, lo que lo hace ideal para datos clasificados que llevan etiquetas, como puntuaciones o precios. Recuerda que ordena en su lugar y devuelve true, y elige un indicador de ordenación que se ajuste a tus tipos de datos. Cuando necesites una combinación diferente de orden, clave frente a valor, o conservación de claves, las funciones relacionadas de la tabla anterior cubren todos los casos.