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 23/12/2009

10 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 — 26/01/2010 @ 18:29

  • 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 — 26/01/2010 @ 18:46

  • [...] 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 — 27/01/2010 @ 7:56

  • 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:wampwwwtextanalysisvolatiletopics.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 — 23/12/2010 @ 14:35

  • Funciona!, muchas gracias… Que mal z0lt4r.

    Comentario de spawn3000 — 06/02/2011 @ 1:07

  • Funcionaria para Letras con natsort()?, creo que si…

    Comentario de spawn3000 — 06/02/2011 @ 1:31

  • BIEN! he modificado los signos de lo que devuelve la funcion comparar, para que me los ordene en forma ascendente.

    Comentario de mauricio — 04/03/2011 @ 15:17

  • 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 — 16/07/2011 @ 17:17

  • Impecable la función!!!

    Muchas gracias

    Comentario de Claudio — 21/10/2011 @ 12:58

  • Hay algunos puntos interesantes en el tiempo en este artículo, pero no sé si veo a todos ellos el centro al corazón. Hay una cierta validez, pero voy a tener opinión suspenso hasta que me veo en él más. Buen artículo, gracias y queremos más! Añadido a FeedBurner, así

    Comentario de NEX-C3 — 16/11/2011 @ 15:13

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

Deja un comentario