(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Collator::setStrength -- collator_set_strength — Устанавливает силу сопоставления
Объектно-ориентированный стиль
Процедурный стиль
Служба сопоставления в наборе библиотек » ICU поддерживает ряд уровней сравнения строк. Эти уровни называются «Уровнями», но их также называют «Силой сравнения». По этим категориям ICU сортирует строки точно в соответствии с местными соглашениями. Однако за счёт выборочной установки уровней искать строки в тексте можно с разными условиями сопоставления.
Первичный уровень:
Обычно обозначает различия между базовыми символами,
например: "a" < "b". Это самый сильный уровень различия.
Например, словари разбивают на разделы по базовым символам.
Этот уровень ещё называется силой level 1
.
Вторичный уровень:
Акценты в символах считают вторичными различиями,
например: "as" < "às" < "at". Другие отличия между буквами
тоже считают вторичными в зависимости от языка.
Вторичное различие игнорируется, если строка содержит первичные различия.
Этот уровень ещё называется силой level 2
.
Замечание:
Примечание: Отдельные языки, например датский, считают часть букв с диакритическими знаками отдельными базовыми символами. Однако в большей части языков буква с акцентом содержит лишь второстепенное отличие от версии этой буквы без ударения.
Третичный уровень:
Различия в верхнем и нижнем регистре символов относятся к третичному уровню,
например: "ao" < "Ao" < "aò". Кроме того, вариант буквы отличается от базовой формы
на третичном уровне, например: "a" и "𝒶". Другой пример — разница между большой и маленькой Кана.
Третичное различие игнорируется, если строки содержат первичное или вторичное различие.
Этот уровень ещё называется силой level 3
.
Четвертичный уровень:
Когда пунктуация игнорируется (смотрите раздел Ignoring Punctuation («Игнорирование знаков препинания»)
в документации ICU) на уровнях 1-3,
различия устанавливаются на дополнительном уровне, чтобы различить слова с пунктуацией и без неё,
например: "ab" < "a-b" < "aB". Эта разница игнорируется,
если строки содержат первичное, вторичное или третичное различие.
Этот уровень ещё называется силой level 4
.
Строки сравнивают на четвертичном уровне, только если требуется игнорирование
знаков препинания или при обработке японского текста (смотрите раздел Hiragana Processing («Обработка хираганы»)
в документации ICU).
Идентичный уровень:
Решающий уровень сравнения строк, которые равны на остальных уровнях.
Значения кодовых точек Unicode формы NFD (англ. Normalization Form D — форма нормализации D)
каждой строки сравниваются на этом уровне,
только если нет разницы на уровнях 1-4. Например, кантиляционные знаки иврита
различаются только на этом уровне. На этом уровне строки сравнивают с осторожностью,
поскольку разница только в значениях кодовых точек между двумя строками — предельно редкое явление.
Сравнение строк на этом уровне заметно снижает производительность как для инкрементного сравнения,
так и для генерации ключа сортировки, и увеличивает длину ключа сортировки.
Этот уровень ещё называется силой level 5
.
Приведём пример. Иногда при поиске текста пользователи игнорируют акценты или акценты и регистр. Бо́льшая часть символов различается по первым трём уровням, поэтому в большей части языков значение по умолчанию — третичный уровень сравнения. Однако, если для параметра «Альтернативный» задали значение «Shifted», то разницу на четвертичном уровне устанавливают, чтобы найти различия между пробелами, пунктуацией и символами, которые иначе функция проигнорировала бы. Символы сравнивают на Идентичном уровне, когда требуется обнаружить тонкие различия между символами наподобие математической полужирной строчной буквой A и математической курсивной строчной буквой A. Однако сравнение на уровнях выше третичного значительно увеличивает длину ключей сортировки и снижает производительность сравнения равных строк.
Функция возвращает логическое значение true
.
Пример #1 Пример установки силы сопоставления функцией collator_set_strength()
<?php
$arr = array('aò', 'Ao', 'ao');
$coll = collator_create('en_US');
// Сортировка массива с силой по умолчанию
collator_sort($coll, $arr);
var_export($arr);
// Сортировка массива с первичной силой
collator_set_strength($coll, Collator::PRIMARY);
collator_sort($coll, $arr);
var_export($arr);
?>
Результат выполнения приведённого примера:
array ( 0 => 'ao', 1 => 'Ao', 2 => 'aò', ) array ( 0 => 'aò', 1 => 'Ao', 2 => 'ao', )