(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Collator::setStrength -- collator_set_strength — Define a força do agrupador
Estilo orientado a objetos
Estilo procedural
O Serviço de Agrupamento » ICU suporta vários níveis de comparação, também chamados de "forças" ("strengths"). Estas categorias permitem à ICU ordenar strings com precisão conforme convenções locais. Entretanto, ao permitir que os níveis sejam seletivamente empregados, a pesquisa por uma string em um texto pode ser realizada com várias condições de correspondência.
Nível primário:
Tipicamento usado para indicar diferenças entre caracteres base
(por exemplo "a" < "b"). É a diferença mais forte. Por
exemplo, dicionários são divididos em seções por caractere
base. É também chamado de força nível 1 (level 1
).
Nível secundário:
Acentuações nos caracteres são consideradas diferenças secundárias (por
exemplo, "as" < "às" < "at"). Outras diferenças entre letras podem
também ser consideradas secundárias, dependendo da língua.
Uma diferença secundária é ignorada quando existir uma diferença primária
em qualquer lugar nas strings. Também chamado de força nível 2 (level 2
).
Nota:
Nota: Em algumas línguas (como o dinamarquês), certas letras acentuadas são consideradas como caracteres base separados. Na maioria da línguas, entretanto, uma letra com acentuação tem apenas diferença secundária em relação à versão não acentuada dessa letra.
Nível terciário:
Diferenças de maiúsculas e minúsculas são distinguidas no
nível terciário (por exemplo, "ao" < "Ao" < "aò"). Além disso,
uma variante de uma letra se diferencia da forma base no nível terciário
(como "a" e "𝒶"). Outro exemplo é a diferença entre o Kana grande e o
pequeno. Uma diferença terciária é ignorada quando existir uma diferença primária
ou secundária em qualquer lugar nas strings. Também chamado de força
nível 3 (level 3
).
Nível quaternário:
Quando a pontuação é ignorada (consulte Ignorando Pontuaçõs) em níveis 1-3,
um nível adicional pode ser usado para distinguir palavras com e sem
pontuação (por exemplo, "ab" < "a-b" < "aB"). Esta diferença é
ignorada quando há uma diferença primária, secundária ou terciária. Também
conhecida como força nível 4 (level 4
). O nível quaternário deve
ser usado apenas se for requerido ignorar a pontuação ou ao processar texto
em japonês (consulte processamento de Hiragana).
Nível idêntico:
Quando todos os outros níveis são iguais, o nível idêntico é usado como um
desempate. Os valores de ponto de código Unicode para a forma NFD de cada string
são comparados neste nível, apenas caso não haja nenhuma diferença nos
níveis 1 a 4. Por exemplo, os sinais hebraicos de cantilação somente são distinguidos
neste nível. Este nível deve ser usado com moderação, já que diferenças somente de valores
de ponto de código entre duas strings é uma ocorrência extremamente rara.
Usar este nível diminui consideravelmente o desempenho tanto para
comparação incremental quanto para geração de chave de ordenação (e também aumenta
o comprimento da chave). Também conhecido como força nível 5 (level 5
).
Por exemplo, pode-se decidir por ignorar acentuação ou ignorar tanto acentuação quanto maiúsculas e minúsculas ao pesquisar por texto. Quase todos os caracteres são diferenciáveis pelos primeiros três níveis e por isso, na maior parte das localidades, o valor padrão é o terciário. Entratanto, se a opção ALTERNATE for definida para SHIFTED, a força quaternária pode ser usada para desempatar entre espaços em branco, pontuação e símbolos que em outros casos seriam ignorados. Se uma distinção muito fina entre caracteres for necessária, o nível idêntico pode ser usado (por exemplo, o nível idêntico distingue entre a letra "a" minúscula matemática em negrito e a letra "a" minúscula matemática em itálico). Entretanto, usar níveis mais altos que o terciário resulta em chaves de ordenação significativamente mais longas, e desempenho mais lento de comparação para strings iguais.
Exemplo #1 Exemplo de collator_set_strength()
<?php
$arr = array( 'aò', 'Ao', 'ao' );
$coll = collator_create( 'en_US' );
// Ordena o array usando a força padrão.
collator_sort( $coll, $arr );
var_export( $arr );
// Ordena o array usando a força primária.
collator_set_strength( $coll, Collator::PRIMARY );
collator_sort( $coll, $arr );
var_export( $arr );
?>
O exemplo acima produzirá:
array ( 0 => 'ao', 1 => 'Ao', 2 => 'aò', ) array ( 0 => 'aò', 1 => 'Ao', 2 => 'ao', )