Neste exemplo, cada elemento no array data
representa um iten em uma tabela. Esse tipo de conjunto de dados é típico
de registros de base de dados.
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
Os dados estão em um array, chamado data. Isso pode ser obtido,
por exemplo, de rodar mysqli_fetch_assoc() em loop.
Vamos ordenar volume decrescente e
edition crescente.
Aqui temos um array de registros, mas array_multisort()
exige um array de colunas, então é preciso converter os dados utilizando o código abaixo
para então executar a ordenação.
<?php
// Os dados como foram criados percorrendo o resultado de 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);
// Obtém uma lista de colunas
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Pode ser usada a função array_column() no lugar do código acima
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// Ordena os dados por volume decrescente, edição crescente.
// Adiciona $data como último parâmetro, para ordenar por uma chave comum.
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
// Percorre os dados e exibe os valores ordenados para cada coluna
echo 'volume | edition', PHP_EOL;
echo '-------+--------', PHP_EOL;
for ($i = 0; $i < count($data); $i++) {
printf("%6d | %7d\n", $volume[$i], $edition[$i]);
}
?>
O conjunto de dados agora está ordenado, assim:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7