(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
.
Четвертичный уровень:
Когда пунктуация игнорируется (смотрите Игнорирование знаков препинания) на уровнях 1-3,
можно использовать дополнительный уровень для различения слов с пунктуацией и без неё
(например, «ab» < «a-b» < «aB»). Эта разница игнорируется,
если есть первичная, вторичная или третичная разница. Также называется силой level 4
.
Четвертичный уровень следует использовать только в том случае, если требуется игнорирование
знаков препинания или при обработке японского текста (смотрите Обработка хираганы).
Идентичный уровень:
Когда все остальные уровни равны, идентичный уровень используется в качестве тай-брейка.
Значения кодовых точек Unicode формы NFD каждой строки сравниваются на этом уровне,
на всякий случай, если нет разницы на уровнях 1-4. Например, кантиляционные знаки иврита
различаются только на этом уровне. Этот уровень следует использовать с осторожностью,
поскольку разница только в значениях кодовых точек между двумя строками является крайне редким явлением.
Использование этого уровня существенно снижает производительность как для инкрементного сравнения,
так и для генерации ключа сортировки (а также увеличивает длину ключа сортировки).
Также называется силой level 5
.
Например, люди могут игнорировать акценты или игнорировать акценты и регистр при поиске текста. Почти все символы различаются по первым трём уровням, поэтому в большинстве языков значение по умолчанию - третичный. Однако, если для параметра «Альтернативный» задано значение «Shifted», то четвертичную силу можно использовать для разрыва связей между пробелами, пунктуацией и символами, которые в противном случае были бы проигнорированы. Если требуются очень тонкие различия между символами, тогда можно использовать Идентичный уровень (например, Идентичный уровень различает Mathematical Bold Small A и the Mathematical Italic Small A.). Однако использование уровней выше, чем третичный, идентичная сила приводит к значительно более длинным ключам сортировки и снижению производительности сравнения строк для равных строк.
Функция возвращает true
в случае успешного выполнения или false
, если возникла ошибка.
Пример #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', )