array_multisort Ordena múltiplos arrays ou arrays multidimensionais &reftitle.description; truearray_multisort arrayarray1 mixedarray1_sort_orderSORT_ASC mixedarray1_sort_flagsSORT_REGULAR mixedrest 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 numéricas serão reindexadas. ¬e.sort-unstable; ¬e.reset-index; &reftitle.parameters; 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) ou 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 - compara itens numericamente SORT_STRING - compara itens como strings SORT_LOCALE_STRING - compara itens como strings, utilizando a localidade atual. Utiliza a localidade, que pode ser modificada com setlocale SORT_NATURAL - compara itens como strings utilizando a "ordenação natural" de natsort SORT_FLAG_CASE - pode ser combinada (operação OR binária) 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. rest Outros arrays, podendo informar também ordem e opções de ordenação. Somente elementos correspondentes a elementos equivalentes nos arrays anteriores são comparados. Em outras palavras, a ordem é lexigráfica. &reftitle.returnvalues; &return.true.always; &reftitle.changelog; &Version; &Description; 8.5.0 Agora o tipo de retorno é &true;, antes era bool. &reftitle.examples; Ordenando vários arrays ]]> 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. 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) } ]]> Ordenando arrays multidimensionais ]]> 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(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) } } ]]> 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: 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. 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: Ordenação sem diferenciar maiúsculas/minúsculas 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 sem diferenciar maiúsculas/minúsculas é preciso forçar para que a ordenação seja executada com uma cópia do array original, transformado em minúsculas. ]]> &example.outputs; Alpha [1] => atomic [2] => bank [3] => Beta ) ]]> &reftitle.seealso; usort &seealso.array.sorting;