Класс Collator

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

Введение

Производит сравнение строк с поддержкой порядка сортировки специфичного для локали.

Обзор классов

class Collator {
/* Константы */
const int PRIMARY;
const int SECONDARY;
const int TERTIARY;
const int IDENTICAL;
const int OFF;
const int ON;
const int SHIFTED;
const int STRENGTH;
/* Методы */
public __construct(string $locale)
public asort(array &$array, int $flags = Collator::SORT_REGULAR): bool
public compare(string $string1, string $string2): int|false
public static create(string $locale): ?Collator
public getAttribute(int $attribute): int|false
public getLocale(int $type): string|false
public getSortKey(string $string): string|false
public getStrength(): int
public setAttribute(int $attribute, int $value): bool
public setStrength(int $strength): bool
public sortWithSortKeys(array &$array): bool
public sort(array &$array, int $flags = Collator::SORT_REGULAR): bool
}

Предопределённые константы

Collator::FRENCH_COLLATION

Сортировка строк с акцентами с конца строки. Этот атрибут автоматически проставляется в On для французской и некоторых других локалей. Обычно пользователям нет необходимости специально задавать этот параметр. Есть некоторая просадка производительности если этот параметр установлен как On, но никак не влияет на длину ключа сортировки. Возможные значения:

Пример #1 Правила FRENCH_COLLATION

  • F=OFF cote < coté < côte < côté
  • F=ON cote < côte < coté < côté

Collator::ALTERNATE_HANDLING

Аттрибут "Alternate" используется для контроля обработки так называемых "переменных символов" в UCA: пробельные символы, знаки пунктуации и символы. Если "Alternate" установлен как NonIgnorable (N), то различия в этих символах будут считаться такими же значимыми, как и различия между буквами. Если "Alternate" установлен как Shifted (S), то эти символы будут иметь низкую значимость. Значение Shifted зачастую используется в комбинации с Strength установленным в "Quaternary". В таких случаях подобные символы будут учитываться при сортировке, но только если все остальные аспекты строк (буквы, акценты, регист) идентичны. Если "Alternate" не установлен как "Shifted", то разницы между "Strength" равным 3 и 4 не будет. Более подробно и с примерами читайте в разделе "Variable_Weighting" на сайте » UCA. Причина, по которой значения для "Alternate" не используются просто On в Off в том, что в будущем могут быть добавлены дополнительные варианты. Опция UCA "Blanked" выражается с помощью "Strength" установленного в и "Alternate" установленного в "Shifted". Для большинства локалей этот параметр по умолчанию равен "NonIgnorable". Если задано "Shifted", то обработка может быть медленнее в случае если у вас много строк, отличающихся только пунктуацией. Длина ключа сортировки не затрагивается только если также не увеличивался уровень "Strength".

Возможные значения:

Пример #2 ALTERNATE_HANDLING rules

  • S=3, A=N di Silva < Di Silva < diSilva < U.S.A. < USA
  • S=3, A=S di Silva = diSilva < Di Silva < U.S.A. = USA
  • S=4, A=S di Silva < diSilva < Di Silva < U.S.A. < USA

Collator::CASE_FIRST

Аттрибут "Case_First" используется для определения порядка сортировки в зависимости от регистра символов при отсутствии других различий в строках. Возможные значения: Uppercase_First(U), Lowercase_First (L), Default и Off. Между "Off" и "Lowercase_First" практически нет разницы, так что пользователи обычно не используют "Lowercase_First", а только Off или Uppercase_First. (Те, кому действительно интересна разница между X и L могут обратиться к Настройке Collation). Задание L или U не сказывается на скорости сравнения, но влияет на длину ключа сортировки.

Возможные значения:

Пример #3 Правила CASE_FIRST

  • C=X or C=L "china" < "China" < "denmark" < "Denmark"
  • C=U "China" < "china" < "Denmark" < "denmark"

Collator::CASE_LEVEL

Аттрибут "Case_Level" используется, когда акценты не важны, а регист важен. В таких случаях установите "Strength" в значение Primary, и "Case_Level" в On. В большинстве локалей по умолчанию задано значение "Off". Оказывает незначительное влияние на скорость сравнения и длину ключа сортировки если установлено как On.

Возможные значения:

Пример #4 CASE_LEVEL rules

  • S=1, E=X role = Role = rôle
  • S=1, E=O role = rôle < Role

Collator::NORMALIZATION_MODE

Настройка "Normalization" определяет, будет ли текст тщательно нормализован в сравнении или нет. Даже если данная настройка отключена (по умолчанию для многих локалей), текст в общем случае будет сравниваться корректно (подробности в UTN #5). Проблемы могут быть только с отметками акцентов расположенными в неканоничном порядке. Если установлено как On, то будет гарантирован наилучший результат для всех возможных вариантов текста. Однако, если установлено как On - это скажется на скорости сравнения, в зависимости от количества последовательностей, который необходимо нормализовать. Какого-либо заметного влияния на длину ключа сортировки оказано не будет. Если заранее известно, что текст уже нормализован как NFD или NFKD, необходимости в использовании этой настройки нет.

Возможные значения:

Collator::STRENGTH

ICU Collation Service поддерживает множество уровней сравнения (они называются "Levels", но также известны как "Strengths"). Использование этих настроек позволяет ICU сортировать строки точно в соответствии с правилами локали. Однако, разрешая выборочное использование этих уровней, поиск строки в тексте можно производить с использованием различных условий. Больше информации описано в главе посвящённой collator_set_strength().

Возможные значения:

Collator::HIRAGANA_QUATERNARY_MODE

Совместимость с JIS x 4061 требует введения дополнительного уровня для выделения символов Hiragana и Katakana. Если требуется совместимость со стандартом, то данный аттрибут необходимо задать как On, а "Strength" как "Quaternary". Это скажется на длине ключа сортировки и скорости сравнения.

Возможные значения:

Collator::NUMERIC_COLLATION

Если включён, этот аттрибут генерирует ключ сравнения для числового значения подстроки состоящей из цифр. Это позволяет при сортировке помещать '100' после '2'.

Возможные значения:

Collator::DEFAULT_VALUE
Collator::PRIMARY
Collator::SECONDARY
Collator::TERTIARY
Collator::DEFAULT_STRENGTH
Collator::QUATERNARY
Collator::IDENTICAL
Collator::OFF
Collator::ON
Collator::SHIFTED
Collator::NON_IGNORABLE
Collator::LOWER_FIRST
Collator::UPPER_FIRST
Collator::SORT_REGULAR

Collator::SORT_STRING

Collator::SORT_NUMERIC

Содержание

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top