ordenar un array bidimensional en base a un campo

PHP      7 Agosto, 2008      2670 lecturas      5 comentarios

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
        )

)
Compartir   twitter   del.icio.us   webeame   meneame   stumbleupon   mr.wong   ?  


  1. artberri

    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!



  2. alejandro

    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 :)



  3. vic

    ok pero aora como introdusco los nombres sin irme al php…por medio de listas…o imploto un txt o dat? que onda



  4. Mr Eko

    Gracias, es el mejor método que he encontrado



  5. Pau

    Eres el puto amo Miquel! Tenía esta necesidad, lo he buscado en Google y he dado con tu blog. La busqueda terminó y en 4 min. ya lo tengo implementado perfectamente :) !


    Grácias ;) !