Black log

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

9 Comentarios
dejar un comentario »

  • 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

» RSS para los comentarios de éste post.
» TrackBack URL

Deja un comentario

Notify me of followup comments via e-mail. You can also subscribe without commenting.