sort()
Aprende a ordenar arrays en PHP con sort(), asort(), ksort(), usort() y sus variantes. Elige la función correcta según tu caso.
Introducción
Ordenar es una de las operaciones más habituales con arrays: organizar una lista de precios, alfabetizar nombres, clasificar puntuaciones. PHP incluye toda una familia de funciones de ordenación, y la que debes elegir depende de dos preguntas: ¿ordenar por valor o por clave? y ¿necesitas conservar las claves originales?
Este capítulo explica sort() y sus funciones relacionadas, muestra la salida de cada una y te ayuda a elegir la función correcta desde el principio.
Comprendiendo la ordenación de arrays en PHP
Las funciones de ordenación de arrays en PHP modifican el array en el lugar (por referencia) y devuelven true en caso de éxito o false en caso de fallo — no devuelven un nuevo array ordenado. Por eso siempre escribes sort($arr);, nunca $arr = sort($arr);.
Las funciones siguen un patrón de nomenclatura predecible:
| Función | Ordena por | ¿Conserva asociaciones de claves? | Orden |
|---|---|---|---|
sort() | valor | No (reindexado 0,1,2…) | ascendente |
rsort() | valor | No | descendente |
asort() | valor | Sí | ascendente |
arsort() | valor | Sí | descendente |
ksort() | clave | Sí | ascendente |
krsort() | clave | Sí | descendente |
usort() | personalizado (valor) | No | personalizado |
uasort() | personalizado (valor) | Sí | personalizado |
uksort() | personalizado (clave) | Sí | personalizado |
El patrón es fácil de leer una vez que lo conoces: una a inicial significa "conservar asociaciones de claves" (Associations), una k significa "ordenar por clave" (Key), una r significa "invertir" (Reverse) y una u significa "comparación definida por el usuario" (User-defined).
sort()
La función sort() ordena un array en orden ascendente por valor. Es la opción correcta para arrays indexados simples (tipo lista) donde no te importan las claves originales — y ahí está la trampa: sort() descarta las claves existentes y reindexia desde 0. Nunca la uses en un array asociativo que quieras conservar intacto.
$numbers = [3, 1, 2];
sort($numbers);
print_r($numbers);Salida:
Array
(
[0] => 1
[1] => 2
[2] => 3
)También funciona con cadenas, comparándolas alfabéticamente:
$fruits = ["banana", "apple", "cherry"];
sort($fruits);
print_r($fruits);
// Array ( [0] => apple [1] => banana [2] => cherry )Puedes modificar la regla de comparación con el segundo argumento opcional flags — por ejemplo SORT_NUMERIC, SORT_STRING o SORT_NATURAL (que ordena "img10" después de "img2" como lo haría un humano).
asort()
La función asort() ordena por valor en orden ascendente pero conserva la asociación clave-valor. Úsala cuando las claves tienen significado, como un mapa de nombres a puntuaciones.
$scores = ['Alice' => 85, 'Bob' => 92, 'Charlie' => 78];
asort($scores);
print_r($scores);Salida (las filas se reordenan, pero cada nombre conserva su puntuación):
Array
(
[Charlie] => 78
[Alice] => 85
[Bob] => 92
)Compara esto con sort($scores), que habría reemplazado Charlie/Alice/Bob por 0/1/2 y perdido los nombres por completo.
ksort()
La función ksort() ordena un array por sus claves en orden ascendente, manteniendo cada clave con su valor. Es útil cuando las claves son IDs, fechas o etiquetas que quieres en orden.
$data = ['c' => 3, 'a' => 1, 'b' => 2];
ksort($data);
print_r($data);Salida:
Array
(
[a] => 1
[b] => 2
[c] => 3
)usort() y uasort()
Cuando los ordenamientos integrados no son suficientes — ordenar objetos, ordenar por un campo anidado o aplicar reglas de negocio — pasa tu propia función de comparación. usort() ordena un array regular (reindexando las claves), mientras que uasort() hace lo mismo pero conserva las claves.
El callback de comparación recibe dos elementos y debe devolver un entero: negativo si el primero debe ir antes que el segundo, positivo si debe ir después y cero si son iguales. El operador nave espacial <=> devuelve exactamente eso, por lo que es la opción 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";
}Salida:
Bob: 25
Alice: 30
Carol: 35Para ordenar de forma descendente, intercambia los operandos: return $b['age'] <=> $a['age'];.
Orden descendente
Para un orden inverso simple, usa las variantes con prefijo r en lugar de escribir un callback personalizado: rsort() (por valor, reindexado), arsort() (por valor, conserva claves) y krsort() (por clave, conserva claves).
$numbers = [3, 1, 2];
rsort($numbers);
print_r($numbers);
// Array ( [0] => 3 [1] => 2 [2] => 1 )Si necesitas un orden alfanumérico "amigable para humanos", consulta natsort(), que ordena ["img12", "img2"] como img2, img12 en lugar del orden ASCII estricto img12, img2.
Aplicaciones prácticas de la ordenación de arrays en PHP
La ordenación de arrays en PHP tiene diversas aplicaciones prácticas, entre ellas:
Ordenación de arrays de precios de productos
Al construir un sitio web de comercio electrónico, puede que necesites ordenar productos según sus precios. Usando las funciones de ordenación de arrays de PHP, puedes ordenar un array de precios de productos en orden ascendente o descendente, permitiendo a los clientes filtrar productos por rango de precio.
Ordenación de arrays de registros de base de datos
Al recuperar datos de una base de datos, puede que necesites ordenar los registros según criterios específicos, como fecha, hora u orden alfabético. Usando las funciones de ordenación de arrays de PHP, puedes ordenar los registros de la base de datos después de recuperarlos, facilitando el análisis de los datos.
Ordenación de arrays de entrada de usuario
Al recopilar datos de entrada del usuario, puede que necesites ordenar los datos según criterios específicos, como edad o ubicación. Usando las funciones de ordenación de arrays de PHP, puedes ordenar los datos de entrada del usuario en orden ascendente o descendente, facilitando la presentación de los datos a otros usuarios.
Conclusión
Elegir la ordenación correcta se reduce a dos preguntas: ¿estás ordenando por valor o por clave, y necesitas conservar las claves originales? Usa sort()/rsort() para listas simples, asort()/arsort() y ksort()/krsort() cuando las claves importan, y usort()/uasort() cuando necesitas reglas personalizadas. Dado que todas estas funciones ordenan en el lugar y devuelven un booleano, recuerda llamarlas como sentencias — no asignar su resultado de vuelta al array.