Ordenar arrays con PHP

  • Por
Vemos distintas maneras de ordenar arrays utilizando las funciones PHP de ordenación de array.
En este taller de PHP vamos a tratar la ordenación de arrays o tablas en PHP. Existen en PHP diversas funciones para ordenar arrays, por lo que realmente lo que vamos a ver es cómo utilizar las funciones que vienen con el lenguaje.

En el manual de programación en PHP tenemos unos artículos que explica el array en PHP. Es de interesante lectura para conocer los conceptos más básicos sobre la creación y manejo de arrays en PHP.

Ahora veamos directamente las funciones disponibles para ordenar arrays.

sort()

Es la función más básica para ordenar arrays en PHP. Ordena el array de valores menores a mayores. Lo vemos con un ejemplo.

//Ordenar desde el menor al mayor
$alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo");
sort($alumnos);
foreach ($alumnos as $key => $val) {
    echo "alumnos[" . $key . "] = " . $val . "<br>";
}

Que dará como resultado:
alumnos[0] = Alberto
alumnos[1] = Gerardo
alumnos[2] = Juan
alumnos[3] = Marcelo
alumnos[4] = Pepe

rsort()

Esta función ordena el array por valores. La "r" delante quiere decir que ordena en orden reverso, de mayor a menor.

//ordenar de mayor a menor (orden inverso... Reverse order)
$alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo");
rsort($alumnos);
foreach ($alumnos as $key => $val) {
    echo "alumnos[" . $key . "] = " . $val . "<br>";
}

Que daría como respuesta:
alumnos[0] = Pepe
alumnos[1] = Marcelo
alumnos[2] = Juan
alumnos[3] = Gerardo
alumnos[4] = Alberto

ksort()

También podemos ordenar un array por el índice o llave, que quiere decir que en lugar de ordenar atendiendo a los valores, se ordenaría atendiendo al índice que tienen. Para ver este ejemplo utilizaremos arrays asociativos, que son los que tienen índices de texto en vez de números.

En el array siguiente vemos que tenemos índices como "h", "e", "a", en lugar de números. Lo que hará este tipo de ordenación es fijarse en esos índices para poner el array ordenado por ellos.

//Ordenar arrays por su índice
$calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral");
ksort($calles);
foreach ($calles as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

Esto dará como resultado esta ordenación:
a = Bailén
e = Castellana
h = Leganitos
z = Fuencarral

krsort()

También podemos ordenar por índices pero en sentido inverso. Es decir, por índices pero de mayor a menor.

//ordenar por índice o clave, pero en orden inverso
$calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral");
krsort($calles);
foreach ($calles as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

En este caso el resultado sería el siguiente:
z = Fuencarral
h = Leganitos
e = Castellana
a = Bailén

asort()

Esta función ordena los elementos de un array, pero manteniendo la correlación entre índices y valores a los que están asociados. Ordena por valores. Se utiliza generalmente en arrays asociativos.

//ordenar manteniendo los índices
$capitales = array("España" => "Madrid", "Argentina" => "Buenos Aires", "México" => "Ciudad de México", "Brasil" => "Brasilia");
asort($capitales);
foreach ($capitales as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

Dará como resultado el siguiente orden de array:
Brasil = Brasilia
Argentina = Buenos Aires
México = Ciudad de México
España = Madrid

arsort()

Es lo mismo que asort(), pero realiza el orden en inverso de los valores de los arrays. Como decíamos, lo habitual es realizar este tipo de orden en arrays asociativos, pero en este caso vamos a ver el orden en un array normal (con índices numéricos) para que se vea mejor cómo trabaja la función:

//ordenar manteniendo los índices, Reverso
$ciudades = array("Madrid", "Barcelona", "Valencia", "Sevilla", "Bilbao");
arsort($ciudades);
foreach ($ciudades as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

El resultado obtenido es este:
2 = Valencia
3 = Sevilla
0 = Madrid
4 = Bilbao
1 = Barcelona

natsort()

Para acabar vamos a ver esta función que hace una ordenación natural de los elementos del array, es decir, ordena tal como lo haría una persona. Hay una pequeña diferencia sobre el orden que haría sort(). La función natsort mantiene la asociación clave - valor.

$productos = array ("producto 11", "producto 1", "producto 12", "producto 2");
natsort($productos);
foreach ($productos as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

Esto daría como respuesta:
2 = producto 1
4 = producto 2
1 = producto 11
3 = producto 12
0 = producto 20

Ahora, para que se vea la diferencia con un orden normal, vamos a ordenar ese mismo array con la función sort(), que hace un orden alfanumérico normal.

$productos = array ("producto 11", "producto 1", "producto 12", "producto 2");
sort($productos);
foreach ($productos as $key => $val) {
    echo $key ." = " . $val . "<br>";
}

El resultado de este orden será el siguiente:
0 = producto 1
1 = producto 11
2 = producto 12
3 = producto 2

Como se puede ver, el orden es distinto, porque en ese caso ordena por un orden alfanumérico estricto, sin tener en cuenta los valores como un humano lo haría.

Autor

Miguel Angel Álvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Martin

19/12/2008
Muchas gracias por esta informacion para ordenar array, me sacaste muchas dudas.

javier

15/6/2009
Ordenar
si ordenaras nombres de meses como le harias?

Paulo McNally

23/12/2009
Muy Buena
Hey, me sirvio de mucho.

Como seria en caso de que tengo dos Array y uno tiene mas valores que el otro ejemplo:

Array 1:
4747
8808
9900

Array 2:
2200
4747
8880
8808
9900

y necesito hacer una Tabla que contenga los valores asi:
2200
4747 4747
8880
8808 8808
9900 9900

Osea dos Columnas con el orden de cada una.
El orden lo logre con su ejemplo pero no logro identificar si son el mismo para asignarle la columna 2.

Saludos y buen ejemplo

arrOz

27/5/2010
xD
Olaaa ia pUedO hacr arrays kxO nO nO pUedO prO iwal lala xD! PD_ zhOiii Un leOn =].!

Juan E. Muñoz Yantani

27/4/2012
Excelente !
Buenisimo el articulo, muy claro y util.

reus

30/11/2012
vectores
para elaborar una aplicacion web que ordene de mayor a menor los vectores de 10 posiciones, ingresados por un formulario web

Marius

01/7/2014
shuffle() array aleatorio
Muy buen explicado, si añades el shuffle() como aleatorio ya lo clavas ;)