gafeman viciao2k3 logo viciao2k3
 
¿que estoy haciendo?
la gente pide a gritos que vuelva a bloguear (bueno en realidad 1) jejeje
 chica del dia  —  la novia de tu mejor amigo
 
Suscribete →  
482  fans y una planta carnivora
 
Viciao2k32008AgostoJueves 07
2

ordenar un array bidimensional en base a un campo

Publicado en PHP  —  507 lecturas

alejandro fiel lector de este humilde blog, pregunta la manera de ordenar un array bidimensional en base a un campo y bueno como es su primer comentario intentaré complacerle aun que solo va a ser por una vez jeje

el siguiente ejemplo ordena ascendentemente una matriz según la edad de cada persona:

Actualización

Gracias a hermann me entero que hay otra forma de hacerlo, mediante la función usort, según hermann el código anterior resulta ineficiente si tienes un array grande.

PHP:
  1. // rellenamos una array
  2. $array[] = array('nombre'=>'miquel','edad'=>22);
  3. $array[] = array('nombre'=>'carlos','edad'=>29);
  4. $array[] = array('nombre'=>'hermann','edad'=>24);
  5. $array[] = array('nombre'=>'jorge','edad'=>21);
  6. $array[] = array('nombre'=>'daniel','edad'=>25);
  7.  
  8. // declaramos la función de ordenación
  9. function cmp($a, $b)
  10. {
  11.     if ($a["edad"] == $b["edad"]) {
  12.         return 0;
  13.     }
  14.     return ($a["edad"] <$b["edad"]) ? -1 : 1;
  15. }
  16.  
  17. // ordenamos segun la función de ordenación
  18. usort($array, "cmp");
  19.  
  20. echo '<pre>';
  21. print_r($array);
  22. echo '</pre>';

código anterior:

PHP:
  1. // rellenamos una array
  2. $array[] = array('nombre'=>'miquel','edad'=>22);
  3. $array[] = array('nombre'=>'carlos','edad'=>29);
  4. $array[] = array('nombre'=>'hermann','edad'=>24);
  5. $array[] = array('nombre'=>'jorge','edad'=>21);
  6. $array[] = array('nombre'=>'daniel','edad'=>25);
  7.  
  8. foreach ($array as $llave => $fila){
  9. $aux[$llave] = $fila['edad'];
  10. }
  11. array_multisort($aux, SORT_ASC, $array);
  12. unset($aux); //eliminamos la array auxiliar $aux
  13.  
  14. echo '<pre>';
  15. print_r($array);
  16. echo '</pre>';

resultado:

Array
(
    [0] => Array
        (
            [nombre] => jorge
            [edad] => 21
        )

    [1] => Array
        (
            [nombre] => miquel
            [edad] => 22
        )

    [2] => Array
        (
            [nombre] => hermann
            [edad] => 24
        )

    [3] => Array
        (
            [nombre] => daniel
            [edad] => 25
        )

    [4] => Array
        (
            [nombre] => carlos
            [edad] => 29
        )

)

¡Compartelo!    twitter   del.icio.us   webeame   meneame   stumbleupon   mr.wong   ?

  •  2  comentarios
  •  0  pings   —   0  trackbacks
 
Pings
  1. No hay pingbacks

Trackbacks
  1. No hay trackbacks
  1. La verdad es que he usado mil maneras para hacerlo, pero la que nunca he usado y la que creo que va a resultar que es la mejor es la que acabas de poner.


    Que cosas aprende uno oyes!


    • gravataralejandro   
    • 8/8/2008   
    • Actividad   

    otras! que honor jajaja , muchas gracias ante todo, y que sepas que me has ayudado de mas , porque esto sabia hacerlo en java , creando un criterio de comparacion que es lo que necesitaba, pero en PHP ni idea tenia , ahora puedo usar esto mismo para mas de un caso en que lo necesitaba , una y mil gracias.

    Si me animo te envio la receta de como descongelar una tortilla jajajaja es broma , un abrazo :)


0-0

Código de conducta


Cualquier comentario que no cumpla una de las condiciones,
sera borrado sin previo aviso:
  1. Ser persona
  2. No insultar (A eso se le llama Trolear)
  3. No escribir el texto en mayusculas (Es lo mismo que gritar)
  4. No Spamear (ej. hablar de lo que comiste ayer...)
  5. Evitar comentarios del tipo soy primero, soy segundo, hijo de puta...
  6. Escribir el comentario en castellano
  7. Saber el día de la semana que naciste
  8. No deshonrar la ortografia del administrador

La sole

¡Participa en la discusión!





background by eboy