natcasesort()
Guia completo sobre a função natcasesort() no PHP: ordenação natural sem diferenciação de maiúsculas e minúsculas, sintaxe e exemplos.
Introdução
natcasesort() ordena um array usando um algoritmo de ordem natural com comparação sem diferenciação de maiúsculas e minúsculas. "Ordem natural" significa que ordena strings da forma como um ser humano faria — assim, img10 vem depois de img2, e não antes, como uma ordenação alfabética simples faria.
Esta página aborda o que é a ordenação natural, como natcasesort() difere de natsort() e sort(), e os detalhes sobre chaves e valores de retorno.
Sintaxe
natcasesort(array &$array): boolA função recebe o array por referência, ordena-o no lugar e retorna true em caso de sucesso. Não é necessário atribuir o resultado de volta — o array passado é modificado diretamente.
| Detalhe | Comportamento |
|---|---|
| Ordena | No lugar (por referência) |
| Chaves | Preservadas — pares chave/valor permanecem vinculados |
| Ordem | Crescente, natural, sem diferenciação de maiúsculas/minúsculas |
| Retorna | bool (true em caso de sucesso) |
Por que a ordem natural é importante
Uma ordenação alfabética regular compara strings caractere por caractere, portanto "img10" é ordenado antes de "img2" porque 1 é menor que 2. Isso raramente é o que uma pessoa espera quando nomes de arquivos ou rótulos contêm números. A ordem natural trata as sequências de dígitos como números, fornecendo o resultado amigável ao ser humano.
Exemplo básico
Saída:
Array
(
[3] => Boston
[2] => Chicago
[1] => Los Angeles
[0] => New York
[4] => San Francisco
)Observe que as chaves (3, 2, 1, 0, 4) não são renumeradas — cada valor mantém sua chave original. Se você precisar redefinir as chaves para 0, 1, 2…, use sort() em vez disso, ou processe o resultado com array_values().
natcasesort() vs natsort() vs sort()
A diferença entre essas três funções fica mais evidente com strings de casos mistos que contêm números:
<?php
$files = array("IMG10.png", "img12.png", "img2.png", "IMG1.png", "img10.png");
$a = $files;
natcasesort($a); // natural + case-insensitive
print_r($a);Saída:
Array
(
[3] => IMG1.png
[2] => img2.png
[0] => IMG10.png
[4] => img10.png
[1] => img12.png
)Com natsort() (com diferenciação de maiúsculas e minúsculas), os mesmos dados são ordenados de forma diferente, porque letras maiúsculas são comparadas como menores do que as minúsculas — portanto, IMG10 aparece antes de img2:
Array
(
[3] => IMG1.png
[0] => IMG10.png
[2] => img2.png
[4] => img10.png
[1] => img12.png
)E sort() (regular, não natural) reindexa as chaves e coloca img10/img12 antes de img2:
Array
(
[0] => IMG1.png
[1] => IMG10.png
[2] => img10.png
[3] => img12.png
[4] => img2.png
)Use natcasesort() quando a ordem deve corresponder à intuição humana e a capitalização deve ser ignorada — por exemplo, ao listar nomes de arquivos enviados por usuários onde alguém pode ter digitado IMG ou img.
Armadilhas
- Retorna um bool, não o array ordenado.
$sorted = natcasesort($arr);define$sortedcomotrue, não como seus dados. Os dados estão em$arr. - As chaves são preservadas. Isso pode quebrar código que assume chaves baseadas em
0após a ordenação. Usearray_values($arr)se precisar de uma lista limpa. - Valores não string são comparados como strings. Números, booleanos etc. são convertidos para string antes da comparação.
Funções relacionadas
natsort()— ordem natural, com diferenciação de maiúsculas e minúsculas.sort()— ordenação crescente regular, reindexa as chaves.asort()— ordenação crescente que preserva as chaves (não natural).usort()— ordenação com seu próprio callback de comparação.
Disponível desde PHP 4.0.0.