944 063 154

Blog

Ordenar arrays asociativos contenidos en otro array con PHP

Publicado enDesarrollo web

Algunas veces disponemos de un array que contiene a su vez varios arrays asociativos. Y que éstos contienen, por ejemplo, datos obtenidos tras una consulta a la base de datos.

Es posible que dicho array esté cacheado y que no queramos atacar a la base de datos para ordenar esos resultados. Por lo que nos vendría genial poder ordenar los arrays asociativos que contenga dicho array. Todo ello en base a cada uno de los valores que contenga una de las claves de los mismos.

Podemos verlo mucho más claro a través de un ejemplo. Pongamos que tenemos el siguiente array:


$resultados = array(

array(

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

     ),

array(

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

     )

);

Funciones de PHP

En PHP disponemos de múltiples funciones, entre ellas la  función usort(). Esta función sirve para ordenar elementos 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 ejemplo, si quisiéramos ordenar en base a la clave id, en orden descendiente, la función debería ser algo parecido a lo 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 usorte utilice dicha función, deberemos llamarle e indicarle que haga la acción que queremos. Para ello 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 ejecutes el código que te indicamos, tus arrays estarán ordenados y no habrás tenido que modificar el contenido de tu base de datos.