(PHP 4, PHP 5, PHP 7)
array_multisort — Ordena múltiplos arrays ou arrays multidimensionais
&$array1
[, mixed $array1_sort_order
= SORT_ASC
[, mixed $array1_sort_flags
= 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.
array1
Um array a ser ordenado.
array1_sort_order
A ordenação para ser utilizada no argumento array anterior. Pode ser
SORT_ASC
para ordenar na ascendente (crescente) SORT_DESC
para ordernar na descendente (decrescente).
Este argumento pode ser trocado com array1_sort_flags
ou ser omitido completamente, e nesse caso é utilizado SORT_ASC
.
array1_sort_flags
Opções de ordenamento para o argumento array anterior:
Flags:
SORT_REGULAR
- comparar itens normalmente
(não modidifica tipos)
SORT_NUMERIC
- compare itens numericamente
SORT_STRING
- compare itens como strings
SORT_LOCALE_STRING
- compare itens como
strings, utilizando o locate atual. Utiliza o locale,
que pode ser modificado com setlocale()
SORT_NATURAL
- compare itens como strings
utilizando a "ordenação natural" de natsort()
SORT_FLAG_CASE
- pode ser combinado
(bitwise OR) com
SORT_STRING
ou
SORT_NATURAL
para ordenar as strings sem considerar maiúsculas e minúsculas
Este argumento pode ser trocado com array1_sort_order
ou completamente omitido, e nesse caso é utilizado SORT_REGULAR
.
...
Outros arrays, podendo informar também ordem e flags de ordenação. Somente elementos correspondentes a elementos equivalentes nos arrays anteriores são comparados. Em outras palavras, a ordem é lexigráfica.
Retorna TRUE
em caso de sucesso ou FALSE
em caso de falha.
Versão | Descrição |
---|---|
5.4.0 |
SORT_NATURAL e SORT_FLAG_CASE
foram adicionados em array1_sort_flags .
|
5.3.0 |
SORT_LOCALE_STRING foi adicionado em
array1_sort_flags .
|
Exemplo #1 Ordenando vários 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, após a ordenação o primeiro array conterá 0, 10, 100, 100. O segundo array conterá 4, 1, 2, 3. Os itens no segundo array correspondentes ao itens idênticos do primeiro array (100 e 100) também são ordenados.
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 arrays multi dimensionais
<?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, após a ordenação o primeiro array será transformado para "10", 100, 100, 11, "a" (ordenado os itens como strings em ordem crescente). O segundo conterá 1, 3, "2", 2, 1 (ordenado como números, em ordem decrescente).
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 bancos de dados
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.
Exemplo:
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.
<?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);
?>
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
// Obtain a list of columns
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Ordena os dados por volume decrescente, edition crescente.
// Adiciona $data como último parâmetro, para ordenar por uma chave comum.
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
O conjunto de dados agora está ordenado, assim:
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
Exemplo #4 Ordenação case insensitive
SORT_STRING
e
SORT_REGULAR
são sensíveis a maiúsculas e minúsculas, de forma que strings
começando com maiúsculas aparecerão primeiro que strings começando com
minúsculas.
Para realizar uma ordenação case insensitive é preciso forçar a ordenação a rodar com uma cópia do array original, transformado em minúsculas.
<?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 )