0

Ordenação Strings Acentuadas

criado por Henrique Luz em 30/06/2011 11:04am
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:

<?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!

Comentários:

Mostrando 1 - 1 de 1 comentários
Joseph disse:
É melhor primeiro tentar usar a classe Collator. Veja a solução na http://es.stackoverflow.com/q/476/127
09/09/2016 9:45pm (~7 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)