Ordenar array bidimensional, matriz, en PHP
En principio PHP dispone de sort(), asort y ksort() para ordenar arrays normales, arrays asociativos (clave-valor), basándose en el valor, y arrays asociativos (clave-valor), basándose en la clave, respectivamente. Estas tres funciones ordenan de forma ascendente. Para ordenar de forma descendente se usaría para cada uno de los tipos de array rsort(), arsort() y krsort().
Antes de continuar veamos que son concretamente los arrays nombrados anteriormente y como se usan estas funciones.
Array normal
Imaginemos que queremos guardar la información de jugadores de baloncesto, su id, faltas cometidas y número de puntos en el último partido. Un array normal se trata de un array simple de la forma:
$jugador= {1,3,15};
Para ordenar alfabeticamente y ascendentemente usaremos
sort($jugador);
Para ordenar descendentemente:
rsort($jugador);
Después de eso utilizaríamos normalmente el array ordenado.
Array asociativo clave-valor
Son los array formados por un par clave-valor, siguiendo con el ejemplo anterior, de la forma:
$jugador = array{'id'=>1,'faltas'=>3,'puntos'=>15};
Para ordenar alfabeticamente y ascendentemente por el valor usaremos
asort($jugador);
Para ordenar descendentemente:
arsort($jugador);
Si queremos ordenar por la clave, en este caso sería una ordenación alfabética ascendente usaremos:
ksort($jugador);
Para ordenador descendentemente:
krsort($jugador);
Todo esto comentado nos sirve para matrices “simples” de una dimensión, pero ¿Qué pasa si queremos guardar en una única matriz los datos de todo el equipo?
Supongamos que tenemos un array de arrays, una matriz, con el siguiente contenido
$jugadores[0]["id"]=1; $jugadores[0]["nombre"]='Pepe'; $jugadores[0]["faltas"]='3'; $jugadores[0]["puntos"]=15; $jugadores[1]["id"]=2; $jugadores[1]["nombre"]='Juan'; $jugadores[1]["faltas"]='2'; $jugadores[1]["puntos"]=14; $jugadores[2]["id"]=3; $jugadores[2]["nombre"]='Mario'; $jugadores[2]["faltas"]='5'; $jugadores[2]["puntos"]=28;
Para conseguir imprimir el contenido de esta matriz por pantalla ordenada podríamos implementar nosotros mismos un bucle que los fuera recorriendo una y otra vez hasta colocarlos correctamente, pero como he dicho, PHP ya dispone de soluciones para hacer este trabajo de una manera más eficiente. No es posible seguir utilizando las funciones anteriores del mismo modo pues nuestra matriz es algo más compleja y necesita que le digamos como comparar cada jugador para ordenarlo, de primeras no sabría que campo de cada uno de estos es por el que queremos ordenar.
Para solucionar esto existe la función usort, uasort() y uksort(). Para estos casos no hay reversas, debemos implementar dos funciones de comparación y llamar a usort utilizando como parámetro una u otra, dependiendo de si queresmos ordenar en un sentido u otro. Para este caso si queremos ordenar por puntos y de forma ascendente usaremos usort().
Lo primero será crear una función que indique entre dos términos cual es el mayor
//Función para ordenar ascendentemente
function cmpPuntosAsc($jugador1, $jugador2)
{
//Si son iguales se devuelve 0
if($jugador1["puntos"]==$jugador2["puntos"])
return 0;
//Si jugador1 > 2 se devuelve 1 y por lo contrario -1
if($jugador1["puntos"]<$jugador2["puntos"])
return -1;
return 1;
}
//Función para ordenar descendentemente
function cmpPuntosDesc($jugador1, $jugador2)
{
//Si son iguales se devuelve 0
if($jugador1["puntos"]==$jugador2["puntos"])
return 0;
//Si jugador1 > 2 se devuelve 1 y por lo contrario -1
if($jugador1["puntos"]<$jugador2["puntos"])
return 1;
return -1;
}
Para ordenar los jugadores ascendentemente por sus puntos haremos
usort($jugadores,"cmpPuntosAsc");
Para ordenar descendentemente llamaremos a
usort($jugadores,"cmpPuntosDesc");
Después de esto utilizaremos el array normalmente llamando a cada elemento por el indice ($jugadores[0], $jugadores[1]…) donde se encontrará ordenado.
Algo así:
$nJugadores=count($jugadores);
$index=0;
echo "Ranking de puntos";
while($index<$nJugadores)
{
echo $jugadores[$index]["nombre"];
$index++;
}
“Ordenar array bidimensional, matriz, en PHP” creado y publicado originalmente en MagMeld (http://magmeld.wordpress.com)




La pagina de tu Blog se ha actualizado…
[..]Articulo Indexado Correctamente en la Blogosfera de Sysmaya[..]…