En este ejemplo, cada elemento del array data
representa una fila de la tabla. Este tipo de datos es típico de un
registro de base de datos.
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
Los datos están en forma de array, llamado data.
Esto es generalmente el resultado, por ejemplo, de la función
mysqli_fetch_assoc().
En este ejemplo, vamos a ordenar la columna
volume en orden descendente, y
la columna edition en orden ascendente.
Tenemos un array de filas, pero
array_multisort() requiere un array de columnas,
por lo tanto utilizamos el siguiente código para obtener las columnas y
así realizar el ordenamiento.
<?php
// Los datos son creados recorriendo mysqli_fetch_assoc:
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// Obtiene una lista de columnas
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Puede utilizarse array_column() en lugar del código anterior
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// Ordena los datos por volume descendente, edition ascendente
// Añade $data como último parámetro, para ordenar por la clave común
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
// Recorre los datos y muestra los valores ordenados para cada columna
echo 'volume | edition', PHP_EOL;
echo '-------+--------', PHP_EOL;
for ($i = 0; $i < count($data); $i++) {
printf("%6d | %7d\n", $volume[$i], $edition[$i]);
}
?>
El conjunto de registros ahora está ordenado y se ve así:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7