W3docs

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ónOrdena por¿Conserva asociaciones de claves?Orden
sort()valorNo (reindexado 0,1,2…)ascendente
rsort()valorNodescendente
asort()valorascendente
arsort()valordescendente
ksort()claveascendente
krsort()clavedescendente
usort()personalizado (valor)Nopersonalizado
uasort()personalizado (valor)personalizado
uksort()personalizado (clave)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: 35

Para 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.

Práctica

Práctica
¿Cuáles de estas son formas correctas de ordenar un array en PHP?
¿Cuáles de estas son formas correctas de ordenar un array en PHP?
Was this page helpful?