Ordenação Strings Acentuadas
Muitas vezes nos deparamos com a situação de ordenar um array de string e em muitos casos simplesmente fazemos uma chamada à função nativa sort(), passando o array que queremos ordenar como parâmetro. Ela resolve muito bem nossos problemas. Mas como toda regra tem sua exceção, esta função não está programada para ordenar palavras acentuadas.
Olhando o manual da função vemos que ela possui parâmetros opcionais, dentre eles uma flag chamada SORT_LOCALE_STRING na qual podemos configurá-la para fazer com que a função compare as strings de acordo com uma determinada lingua local. Para isso, basta utilizar a função, também nativa, setlocale() definindo-a para utilizar o padrão brasileiro.
Assim teremos o nosso código final:
Onde teremos a seguinte saída:
Henrique, Ítalo, Felipe, Ênio, Marcos,
Felipe, Henrique, Marcos, Ênio, Ítalo,
Ênio, Felipe, Henrique, Ítalo, Marcos,
_
Simples e bastante intuitivo.
Até a próxima!
Olhando o manual da função vemos que ela possui parâmetros opcionais, dentre eles uma flag chamada SORT_LOCALE_STRING na qual podemos configurá-la para fazer com que a função compare as strings de acordo com uma determinada lingua local. Para isso, basta utilizar a função, também nativa, setlocale() definindo-a para utilizar o padrão brasileiro.
Assim teremos o nosso código final:
<?php $lista = array(1 => 'Henrique', 2 => 'Ítalo', 3 => 'Felipe', 4 => 'Ênio', 5 => 'Marcos' ); //Exibir array desordenado foreach($lista as $nome){ echo $nome . ", "; } sort($lista); echo "<BR>"; //Exibir array ordenado com exceção das palavras acentuadas foreach($lista as $nome){ echo $nome . ", "; } /* Configurando o locale para informações em Português-BR * LC_ALL - afeta todas as funções abaixo */ setlocale(LC_ALL, "pt_BR", "ptb"); sort($lista, SORT_LOCALE_STRING); echo "<BR>"; //Exibe o array ordenado de acordo a lingua local - Português-BR foreach($lista as $pessoa){ echo $pessoa . ", "; } ?>
Onde teremos a seguinte saída:
Henrique, Ítalo, Felipe, Ênio, Marcos,
Felipe, Henrique, Marcos, Ênio, Ítalo,
Ênio, Felipe, Henrique, Ítalo, Marcos,
_
Simples e bastante intuitivo.
Até a próxima!