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'));
— Posted by admin | 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
Buenas crack,
he probado el código y no me funcionaba; me salía este error:
“Warning: usort() expects parameter 2 to be a valid callback, array must have exactly two members in C:\wamp\www\textanalysis\volatiletopics.php on line 174″
Lo he solucionado cambiando esto:
” usort($resultados, array(‘comparar’));”
Por esto:
” usort($resultados, ‘comparar’);”
Uso PHP 5.3, por si te interesa.
Gracias por el código fiera!
Comentario de wildkyo — December 23, 2010 @ 2:35 pm
Funciona!, muchas gracias… Que mal z0lt4r.
Comentario de spawn3000 — February 6, 2011 @ 1:07 am
Funcionaria para Letras con natsort()?, creo que si…
Comentario de spawn3000 — February 6, 2011 @ 1:31 am
BIEN! he modificado los signos de lo que devuelve la funcion comparar, para que me los ordene en forma ascendente.
Comentario de mauricio — March 4, 2011 @ 3:17 pm
Hola, soy nuevo en este mundo de PHP y gracias a este aporte pude resolver un problema de ordenación de itemes que me estaba causando un serio dolor de cabeza.
Gracias y saludos.
Comentario de ideal-chat — July 16, 2011 @ 5:17 pm
Impecable la función!!!
Muchas gracias
Comentario de Claudio — October 21, 2011 @ 12:58 pm