(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Collator::setStrength -- collator_set_strength — Establecer la fuerza (strength) de un cotejo
Estilo orientado a objetos
Estilo por procedimientos
El Servicio de Cotejo de » ICU soporta muchos niveles de comparación (llamados "Levels", pero también conocidos como "Strengths"). Tener estas categorías habilita a ICU para ordenar cadenas de manera precisa según las convenciones regionales. Sin embargo, al permitir que los niveles sean empleados selectivamente, la búsqueda de una cadena en un texto se podrá realizar con varias condiciones de coincidencia.
Nivel Primario (Primary): Se utiliza normalmente para denotar diferencias entre caracteres base (por ejemplo, "a" < "b"). Es la diferencia más fuerte. Por ejemplo, los diccionarios están divididos en diferentes secciones mediante caracteres base. También se le llama fuerza de nivel 1.
Nivel Secundario (Secondary): Los acentos de los caracteres se consideran diferencias secundarias (por ejemplo, "as" < "às" < "at"). También se pueden considerar como secundarias otras diferencias entre letras, dependiendo del lenguaje. Una diferencia secundaria es ignorada cuando existe una diferencia primaria en cualquier lugar de las cadenas. También se le llama fuerza de nivel 2.
Nota:
Nota: En algunos lenguajes (como en el danés), algunas letras acentuadas están consideradas como caracteres base por separado. Sin embargo, en la mayoría de los lenguajes, una letra acentuada solamente tiene una diferencia secundaria con su versión no acentuada de esa misma letra.
Nivel Terciario (Tertiary): Las diferencias entre caracteres mayúsculas y minúsculas se distinguen en el nivel terciario (por ejemplo, "ao" < "Ao" < "aò"). Además, una variante de una letra difiere de su forma base en este nivel (como "A" y " "). Otro ejemplo es la diferencia entre un Kana grande y uno pequeño. Una diferencia terciaria es ignorada cuando existe una diferencia primaria o secundaria en cualquier lugar de las cadenas. También se le llama fuerza de nivel 3.
Nivel Cuaternario (Quaternary): Cuando se ignora la puntuación (véase Ignorar la Puntuación) en el nivel 13, se puede usar un nivel adicional para distinguir entre palabra con y sin puntuación (por ejemplo, "ab" < "a-b" < "aB"). Esta diferencia es ignorada cuando existe una diferencia primaria, secundaria o terciaria. También se le llama fuerza de nivel 4. El nivel cuaternario sólo debería usarse si es necesario ignorar la puntuación o al procesar texto japonés (véase el procesamiento de Hiragana).
Nivel Idéntico (Identical): Cuando todos los demás niveles son iguales, el nivel idéntico se usa como "desempate". Los valores de los caracteres Unicode de la forma NFD de cada cadena se comparan en este nivel, como en el caso de que no existan diferencias en los niveles 14. Por ejemplo, las marcas de cantilación hebreas sólo son distinguibles en este nivel. Este nivel debería usarse poco, ya que las diferencias de los valores de los caracteres entre dos cadenas ocurre en raras ocasiones. Usar este nivel disminuye sustancialmente el rendimiento de la comparación incremental y la generación de claves de ordenación (así como también aumenta la longitud de las claves de ordenación). También es conocido como fuerza de nivel 5
Por ejemplo, se puede escoger ignorar los acentos o ignorara los acentos y si son mayúsculas/minúsculas en la búsqueda de un texto. La mayoría de los caracteres son distinguibles por los tres primeros niveles, y en la mayoría de las configuraciones regionales el valor predeterminado es por lo tanto Tertiary. Sin embargo, si Alternate se establece a Shifted, la fuerza Quaternary se podría usar para romper "empates" entre espacios en blanco, puntiaciones y símbolos que de otra manera serían ignorados. Si se necesita distinguir de manera precisa entre caracteres, se puede usar la fuerza Identical (por ejemplo, la Fuerza Identical distinque entre la A Matemática Pequeña Negrita y la A Matemática Pequeña Itálica). Sin embargo, al usar niveles mayores que el terciario la fuerza Identical resulta en claves de ordenación significativamente más grandes, y un rendimiento más lento en la comparación de cadenas iguales.
Ejemplo #1 Ejemplo de collator_set_strength()
<?php
$arr = array( 'aò', 'Ao', 'ao' );
$coll = collator_create( 'en_US' );
// Ordenar el array usando la fuerza predeterminada.
collator_sort( $coll, $arr );
var_export( $arr );
// Ordenar el array usando la fuerza primaria.
collator_set_strength( $coll, Collator::PRIMARY );
collator_sort( $coll, $arr );
var_export( $arr );
?>
El resultado del ejemplo sería:
array ( 0 => 'ao', 1 => 'Ao', 2 => 'aò', ) array ( 0 => 'aò', 1 => 'Ao', 2 => 'ao', )