Fork me on GitHub

Miquel Camps Orteza

Soy programador web. Estoy especializado en desarrollo web (php, js). Estoy aprendiendo a desarrollar apps para iphone/ipad.
Organizo betabeers en Madrid.
Sobre mí     Metas     Hacks     Contactar     LinkedIn     Twitter    
Inicio

ordenar un array bidimensional en base a un campo

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]// rellenamos una array
$array[] = array(‘nombre’=>’miquel’,'edad’=>22);
$array[] = array(‘nombre’=>’carlos’,'edad’=>29);
$array[] = array(‘nombre’=>’hermann’,'edad’=>24);
$array[] = array(‘nombre’=>’jorge’,'edad’=>21);
$array[] = array(‘nombre’=>’daniel’,'edad’=>25);

// declaramos la función de ordenación
function cmp($a, $b)
{
if ($a["edad"] == $b["edad"]) {
return 0;
}
return ($a["edad"] < $b["edad"]) ? -1 : 1;
}

// ordenamos segun la función de ordenación
usort($array, "cmp");

echo '

‘;
print_r($array);
echo ‘

';[/php]

código anterior:

[php]// rellenamos una array
$array[] = array('nombre'=>'miquel','edad'=>22);
$array[] = array('nombre'=>'carlos','edad'=>29);
$array[] = array('nombre'=>'hermann','edad'=>24);
$array[] = array('nombre'=>'jorge','edad'=>21);
$array[] = array('nombre'=>'daniel','edad'=>25);

foreach ($array as $llave => $fila){
$aux[$llave] = $fila['edad'];
}
array_multisort($aux, SORT_ASC, $array);
unset($aux); //eliminamos la array auxiliar $aux

echo '

';
print_r($array);
echo '

';[/php]

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
        )

)
agosto 7, 2008
Sigueme en twitter Suscribete por RSS Suscribete por email
Temas relacionados
Deja un comentario







Comentarios
  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 ;) !


  6. El tiburon del acuario

    Hola!
    He implementado tu codigo. Me funcionó de maravilla. 1000 gracias y chido.

    Gracias hermano.


  7. Angel Uribe

    Perfecto, gracias… Ahora la gran pregunta ¿cómo ordeno mi arreglo sin importar mayúsculas, minúsculas y acentos?… Nuevamente Gracias.