Algunas veces disponemos de un array que contiene a su vez varios arrays asociativos, que contienen por ejemplo datos obtenidos tras una consulta a la base de datos.
Puede que dicho array esté cacheado y 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, en base a los valores que contenga una de las claves de los mismos.
Lo vemos más claro en un ejemplo. Tenemos el siguiente array:
$resultados = array(
array(
'id' => 1,
'nombre' => 'Enjuto',
'apellido' => 'Mojamuto'
),
array(
'id' => 2,
'nombre' => 'Marlo',
'apellido' => 'Brando'
)
);
En php disponemos de la función usort(), que ordena en base a una función de comparación que nosotros especifiquemos.
Por ejemplo si quisiéramos ordenar en base a la clave id, en orden descendiente, la función sería:
function comparar($x, $y){
if ( $x['id'] == $y['id'] )
return 0;
else if ( $x['id'] > $y['id'] )
return -1;
else
return 1;
}
Y ahora llamamos a usort para que utilice dicha función:
//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'));
Saludos, Asier Marqués
— Posted by Asier Marqués | Posted in Desarrollo web | Posted on December 23, 2009




Eso no funciona, ya lo he comprobado y lo he visto en varios blogs,
por favor, antes de publicar algo, os podríais asegurar que funciona correctamnete, ¿no?
El error que da es:
usort() [function.usort]: Invalid comparison function
Hasta pronto,
Salu2
Comentario de z0lt4r — January 26, 2010 @ 6:29 pm
Hola z0lt4r,
El código lo he escrito yo, por lo que es difícil que lo hayas visto en otros blogs.. quizá en este sí: http://asiermarques.com/2008/10/29/ordenar-arrays-multidimensionales-en-base-a-una-clave-asociativa-con-php/
Probablemente te de error al intentar llamar incorrectamente a la función que hace la comparación en sí.
Antes de acusar está mejor documentarse.
Un saludo.
Comentario de Asier Marqués — January 26, 2010 @ 6:46 pm
[...] This post was mentioned on Twitter by Asier Marqués, ADRlANA. ADRlANA said: ZAS en toda la boca para z0lt4r XD !http://is.gd/760vg [...]
Pingback de Tweets that mention Ordenar arrays asociativos contenidos en otro array con php | Blackslot, servicios avanzados de desarrollo web, hosting y sistemas TI -- Topsy.com — January 27, 2010 @ 7:56 am