Ordenando Arrays PHP

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

Voltar para o topo