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
)
)
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!
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
ok pero aora como introdusco los nombres sin irme al php…por medio de listas…o imploto un txt o dat? que onda
Gracias, es el mejor método que he encontrado
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
!
Hola!
He implementado tu codigo. Me funcionó de maravilla. 1000 gracias y chido.
Gracias hermano.
Perfecto, gracias… Ahora la gran pregunta ¿cómo ordeno mi arreglo sin importar mayúsculas, minúsculas y acentos?… Nuevamente Gracias.