(PHP 4, PHP 5)
array_multisort — Ordena múltiplos arrays ou arrays multidimensionais
&$arr
[, mixed $arg
= SORT_ASC
[, mixed $arg
= SORT_REGULAR
[, mixed $...
]]] )array_multisort() pode ser usada para ordenar vários arrays de uma vez, ou um array multidimensional por uma ou mais dimensões.
Chaves associativas (string) serão mantidas, mas chaves númericas serão reindexadas.
Retorna TRUE
em caso de sucesso ou FALSE
em caso de falha.
Exemplo #1 Ordenando múltiplos arrays
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
Nesse exemplo, depois da ordenação, o primeiro array conterá 0, 10, 100, 100. O segundo conterá 4, 1, 2, 3. As entradas do segundo array correspondendo às entradas idênticas como foram ordenadas no primeiro array (100 e 100).
array(4) { [0]=> int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(3) }
Exemplo #2 Ordenando um array multidimensional
<?php
$ar = array(
array("10", 11, 100, 100, "a"),
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
Neste exemplo, depois da ordenação, o primeiro array se transformará em "10", 100, 100, 11, "a" (ele foi ordenado como strings em ordem ascendente). O segundo conterá 1, 3, "2", 2, 1 (ordenados como números, em ordem descendente).
array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } }
Exemplo #3 Ordenando resultados de um banco de dados
Para este exemplo, cada elemento no array data representa uma linha na tabela. Este tipo de conjunto de dados é típico de registros de banco de dados.
Dados do Exemplo:
volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7
Os dados como um array, chamado data. Isto seria normalmente, por exemplo, obtido por um loop em mysql_fetch_assoc().
<?php
$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);
?>
Neste exemplo, ordenaremos por volume descendente, edition ascendente.
Nós temos uma matriz de linhas, mas array_multisort() requer uma matriz de colunas, assim nós usamos o código abaixo para obter colunas e então realizar o ordenamento.
<?php
// Obter uma lista de colunas
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Ordena os dados com volume descendente, edition ascendente
// adiciona $data como o último parãmetro, para ordenar pela chave comum
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
O conjunto de dados agora está ordenado e será parecido com isto:
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
Exemplo #4 Ordenar sem diferenciar maiúsculas e minúsculas
Ambas SORT_STRING
e
SORT_REGULAR
diferenciam maiúsculas e minúsculas, strings
começando com uma letra maiúscula virão antes de uma
string começando com uma letra minúscula.
Para ordenar sem diferenciar maiúsculas e minúsculas, force a ordem da ordenação para que seja determinada por uma cópia em letras minúsculas da matriz original.
<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>
O exemplo acima irá imprimir:
Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )