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!