O PHP nos disponibiliza diversas funções para facilitar o trabalho com arrays, isso inclui funções simples mas poderosas para ordenar arrays. Então nesse artigo demonstrarei as seguintes funções para ordenar arrays:
- asort
- arsort
- ksort
- krsort
- sort
- rsort
- natsort
- natcasesort
- shuffle
- usort
- uasort
- uksort
- array_multisort
Uma observação importante a se fazer é que todas essas funções não retornam o array ordenado, e sim um boolean, com o valor true ou false caso o array seja ordenado ou não. Então depois de utilizar a função, daquele ponto em diante o array estará ordenado.
asort
Ordena um array pelos valores em ordem crescente, os índices são mantidos.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
asort($frutas);
// Resultado: Array ( [b] => banana [a] => laranja [d] => limao [c] => melancia )
arsort
Ordena um array pelos valores em ordem decrescente, os índices são mantidos.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
arsort($frutas);
// Resultado: Array ( [c] => melancia [d] => limao [a] => laranja [b] => banana )
ksort
Ordena um array pelas chaves em ordem crescente.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
ksort($frutas);
// Resultado: Array ( [a] => laranja [b] => banana [c] => melancia [d] => limao )
krsort
Ordena um array pelas chaves em ordem decrescente.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
krsort($frutas);
// Resultado: Array ( [d] => limao [c] => melancia [b] => banana [a] => laranja )
sort
Semelhante a função asort
, porém
essa função ordena um array mas zera as chaves.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
sort($frutas);
// Resultado: Array ( [0] => banana [1] => laranja [2] => limao [3] => melancia )
rsort
Semelhante a função sort
, porém
essa função ordena em ordem decrescente zerando as chaves.
$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");
rsort($frutas);
// Resultado: Array ( [0] => melancia [1] => limao [2] => laranja [3] => banana )
natsort
Ordena o array de forma natural, por exemplo o array.
$array = array('img1', 'img2', 'img10', 'img20');
natsort($array);
print_r($array);
// Array ( [0] => img1 [2] => img2 [1] => img10 [3] => img20 )
Sendo que a função sort
ordenaria o mesmo array
da seguinte maneira.
$array = array('img1', 'img2', 'img10', 'img20');
sort($array);
print_r($array);
// Array ( [0] => img1 [1] => img10 [2] => img2 [3] => img20 )
natcasesort
Semelhante a função natsort
, a diferença
é que essa não faz diferenciação entre maiúsculas e minúsculas.
$array = array('img1', 'img2', 'img10', 'img20');
natcasesort($array);
print_r($array);
// Array ( [0] => img1 [1] => img2 [2] => img10 [3] => img20 )
shuffle
Ordena um array pelos valores de forma aleatória, as chaves serão zeradas.
$array = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow");
shuffle($array);
print_r($array);
// Exemplo: Array ( [0] => green [1] => red [2] => blue [3] => yellow )
usort
Semelhante a função sort
porém a ordenação é feita
através de uma função de comparação
definida pelo usuário, a função usort
não mantém a associação
de chaves e valores, zerando as chaves após a ordenação.
function my_sort($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$arr = array("a" => 4, "b" => 2, "c" => 8, 'd' => "6");
usort($arr, "my_sort");
print_r($arr);
// Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
uasort
Semelhante a função asort
porém a ordenação é feita
através de uma função de comparação
definida pelo usuário, a função uasort
mantém a associação
de chaves e valores.
function my_sort($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$arr = array("a" => 4, "b" => 2, "c" => 8, 'd' => "6");
uasort($arr, "my_sort");
print_r($arr);
// Array ( [b] => 2 [a] => 4 [d] => 6 [c] => 8 )
uksort
Semelhante a função ksort
porém a
ordenação é feita através de uma função de comparação
definida pelo usuário, a função uksort
ordena
o array referente a chaves.
function my_sort($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$arr = array("a" => 4, "b" => 2, "c" => 8, 'd' => "6");
uksort($arr, "my_sort");
print_r($arr);
// Array ( [a] => 4 [b] => 2 [c] => 8 [d] => 6 )
array_multisort
Ordena um ou mais arrays pelos seus valores, podendo ser passado quantos arrays forem necessários.
Você pode passar dois argumentos seguidos do primeiro array, sem ser outro array, esses argumentos serão aplicados no primeiro array:
O primeiro argumento depois do primeiro array é a ordem de classificação, que pode receber as seguintes constantes:
- SORT_ASC: Ordena em ordem crescente
- SORT_DESC: Ordena em ordem decrescente
O segundo argumento depois do primeiro array é o tipo da ordem, que pode receber as seguintes constantes:
- SORT_REGULAR
- SORT_NUMERIC
- SORT_STRING
- SORT_LOCALE_STRING
- SORT_NATURAL
- SORT_FLAG_CASE
Um exemplo dessa função:
$ar1 = array(10, 2, 1, 20);
$ar2 = array('cat', 'dog', 'bird', 'fish');
array_multisort($ar1, $ar2);
print_r($ar1);
// Array ( [0] => 1 [1] => 2 [2] => 10 [3] => 20 )
print_r($ar2);
// Array ( [0] => bird [1] => dog [2] => cat [3] => fish )
Note que o segundo array aparentemente não esta ordenado corretamente, porque essa função ordena o segundo array conforme o número do primeiro, por exemplo no primeiro array o valor 1 esta na posição 3, no segundo array quem está na posição 3 é o bird, por tanto depois de ordenado o valor 1 ficou na primeira posição, então o valor bird do segundo array também ficará na primeira posição, e isso acontece com os outros valores também.
Referência: http://php.net/manual/pt_BR/array.sorting.php