944 063 154

Blog

Ordenar arrays asociativos contenidos en otro array con PHP

Publicado enDesarrollo y Programación

Hay algunas veces en las que disponemos de un array que contiene a su vez varios arrays asociativos. Y que, a su vez, estos pueden contener más información. Como por ejemplo los datos obtenidos tras realizar una consulta a la base de datos.

Es posible que dicho array esté cacheado y que, por ello, no queramos atacar a la base de datos para ordenar esos resultados. Es decir, que queramos ordenar la información pero sin tener que modificar nada en la base de datos. En esta situación, nos vendría genial poder ordenar los arrays asociativos que contenga dicho array de alguna forma fuera de la base de datos. Todo ello en base a cada uno de los valores que contenga una de las claves de los mismos.

Todo esto, podemos verlo mucho más claro a través de un ejemplo. Pongamos que tenemos un array que contiene nombres y apellidos y queremos ordenar esa información. Para ello deberemos recurrir a un array como, por ejemplo, el siguiente:


$resultados = array(

array(

      'id' => 1,
      'nombre' => 'Enjuto',
      'apellido' => 'Mojamuto'

     ),

array(

      'id' => 2,
      'nombre'  => 'Marlo',
      'apellido'  => 'Brando'

     )

);

Funciones de PHP

Pra realizar esta misma tarea, en PHP disponemos de múltiples funciones. Entre tantas funciones destaca una: la función usort(). Esta función de PHP sirve para ordenar elementos dentro de una base de datos en base a una función de comparación. Este es un criterio que nosotros mismos podemos especificar según los resultados que nos interese obtener. Por lo que si queremos obtener diferente información, podemos ordenar los datos de la base de datos de maneras distintas.

Por ejemplo, si quisiéramos ordenar los datos contenidos en la base de datos según la clave ID, en orden descendiente; deberíamos ejecutar una función de un aspecto similar a la siguiente:


function comparar($x, $y){

          if ( $x['id'] == $y['id'] )
             return 0;
          else if ( $x['id'] > $y['id'] )
             return -1;
          else
             return 1;

}

Ahora, para que usort() pueda utilizar función, deberemos llamarle e indicarle que haga la acción que queremos. De otra manera, usort() no sabrá qué es lo que tiene que hacer ni de dónde tiene que obtener esa información. Pero facilitarle las cosas a la función usort() bastará con ejecutar un código similar a este:


//si no estamos en un entorno Orientado a Objetos
usort($resultados, array('comparar'));

//si estamos en un entorno Orientado a Objetos
usort($resultados, array('nombreDeClase','comparar'));

Una vez hayas ejecutado el código que te indicamos, tus arrays estarán ordenados. Y, para ello, no habrás tenido que realizar ningún tipo de modificación en el contenido de tu base de datos.