Ordenar un array multidimensional en PHP
Con la función de php array_multisort podremos ordenar arrays.
En este caso, ordenaremos un array multidimensional según el valor de uno o más campos, y tomaremos como ejemplo el siguiente array:
$data[] = array( "nombre" => "Luis", "apellido" => "González", "edad" => 20 ); $data[] = array( "nombre" => "María", "apellido" => "Ares", "edad" => 30 ); $data[] = array( "nombre" => "José", "apellido" => "González", "edad" => 19 ); $data[] = array( "nombre" => "Amelia", "apellido" => "Montoto", "edad" => 35 ); $data[] = array( "nombre" => "Ana", "apellido" => "Ramírez", "edad" => 30 );
En primer lugar, ordenaremos los datos según el valor apellido, y de forma ascendente:
echo "Ordenado por apellido ascendente:"; foreach ($data as $clave => $fila) { $orden1[$clave] = $fila['apellido']; } array_multisort($orden1, SORT_ASC, $data); foreach ($data as $clave => $fila) { echo $fila['apellido']." ".$fila['nombre']." - ". $fila['edad']." "; }
Lo que nos devolverá:
Ordenado por apellido ascendente: Ares María - 30 González José - 19 González Luis - 20 Montoto Amelia - 35 Ramírez Ana - 30
Ahora vamos a ordenar los datos según los valores edad y apellido, también de forma ascendente:
echo " Ordenado por edad ascendente y apellido ascendente:"; foreach ($data as $clave => $fila) { $orden1[$clave] = $fila['edad']; $orden2[$clave] = $fila['apellido']; } array_multisort($orden1, SORT_ASC, $orden2, SORT_ASC, $data); foreach ($data as $clave => $fila) { echo $fila['apellido']." ".$fila['nombre']." - ". $fila['edad']." "; }
Este será el resultado:
Ordenado por edad ascendente y apellido ascendente: González José - 19 González Luis - 20 Ares María - 30 Ramírez Ana - 30 Montoto Amelia - 35
De esta forma podremos ordenar cualquier array multidimensional.
Me salvaste!!!
muchas gracias, funciona perfecto.