Ordenar arrays asociativos en PHP: diferencia entre ksort y asort

Los arrays asociativos son estructuras de datos que PHP nos ofrece para poder almacenar datos asociados a una serie de claves, en lugar de a un índice numérico. En otros lenguajes, se les denomina tablas hash.

La ordenación de dichos arrays, es una de las operaciones básicas de cara a un correcto manejo de los mismos. Para poder llevar a cabo esa operación, PHP nos ofrece dos funciones: asort y ksort que vamos a explicar en esta entrada. Este tipo de array se utiliza muy a menudo al hacer consultas contra bases de datos, con funciones como mysql_fetch_array.

Creación del array

Antes de comenzar con el ejemplo, vamos a crear un vector de ejemplo (es una adaptación del ejemplo presente en la documentación oficial).

$fruits = array("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");

Ordenar con ksort

Ordena el array por su clave (key), de esta forma tendríamos (es interesante ver el uso de foreach en este código):

ksort($frutas);
foreach ($frutas as $key => $val) {
    echo "$key = $val\n";
}

La salida sería:

  • a = naranja
  • b = plátano
  • c = manzana
  • d = limón

Ordenar con asort

Si lo que queremos es realizar la ordenación de forma que la referencia sea el valor, usaremos esta otra función:

asort($frutas);
foreach ($frutas as $key => $val) {
    echo "$key = $val\n";
}

La salida esta vez sería:

  • d = limón
  • c = manzana
  • a = naranja
  • b = plátano

Ordenación en sentido inverso

A modo de curiosidad os indico cómo sería esta misma ordenación pero en sentido inverso, para cada caso tenemos una función:

  • arsort
  • krsort