PHP Conference Japan 2024

Collator 類別

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

簡介

提供字串比較功能,支援適當的在地區排序規則。

類別概要

class Collator {
/* 常數 */
public const int DEFAULT_VALUE;
public const int PRIMARY;
public const int SECONDARY;
public const int TERTIARY;
公開 常數 整數 預設強度;
公開 常數 整數 四級;
公開 常數 整數 完全相同;
公開 常數 整數 關閉;
公開 常數 整數 開啟;
公開 常數 整數 位移;
公開 常數 整數 不可忽略;
公開 常數 整數 小寫優先;
公開 常數 整數 大寫優先;
公開 常數 整數 法語排序;
公開 常數 整數 替代處理;
公開 常數 整數 大小寫優先;
公開 常數 整數 大小寫層級;
公開 常數 整數 正規化模式;
公開 常數 整數 強度;
公開 常數 整數 數字排序;
公開 常數 整數 SORT_REGULAR;
公開 常數 整數 SORT_STRING;
公開 常數 整數 SORT_NUMERIC;
/* 方法 */
公開 __construct(字串 $locale)
公開 asort(陣列 &$array, 整數 $flags = Collator::SORT_REGULAR): 布林值
公開 compare(字串 $string1, 字串 $string2): 整數|false
公開 靜態 create(字串 $locale): ?Collator
公開 getAttribute(整數 $attribute): 整數|false
公開 getLocale(整數 $type): 字串|false
公開 getSortKey(字串 $string): 字串|false
公開 setAttribute(整數 $attribute, 整數 $value): 布林值
公開 setStrength(整數 $strength):
公開 sort(陣列 &$array, 整數 $flags = Collator::SORT_REGULAR): 布林值
}

預先定義的常數

Collator::FRENCH_COLLATION 整數

從字串尾端排序帶有不同重音符號的字串。此屬性會自動為法語地區設定和其他一些地區設定為「開啟」。使用者通常不需要明確設定此屬性。當它設定為「開啟」時,字串比較效能會有所損耗,但排序鍵長度不受影響。可能的值為

範例 #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,偏移),則這些字元的重要性較低。「偏移」值通常與「強度」設定為四級一起使用。在這種情況下,比較字串時會考慮空格、標點符號和符號,但前提是字串的所有其他方面(基本字母、重音符號和大小寫)都相同。如果 Alternate 未設定為「偏移」,則強度為 3 和強度為 4 之間沒有區別。有關更多資訊和範例,請參閱 » UCA 中的 Variable_Weighting。Alternate 值不是簡單的「開啟」和「關閉」的原因是,未來可能會新增其他 Alternate 值。UCA 選項 Blanked(空白)以強度設定為 3 且 Alternate 設定為「偏移」來表示。大多數地區設定的預設值為 NonIgnorable(不可忽略)。如果選擇「偏移」,則如果許多字串除了標點符號之外都相同,則速度可能會變慢;排序鍵長度不會受到影響,除非強度級別也增加。

可能的值為

範例 #2 ALTERNATE_HANDLING 規則

  • 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),以及標準的 DefaultOff。Off 和 Lowercase_First 選項在結果方面幾乎沒有區別,因此通常用戶不會使用 Lowercase_First:只會使用 Off 或 Uppercase_First。(對 X 和 L 之間的詳細差異感興趣的人應該參考 Collation Customization)。指定 L 或 U 不會影響字串比較效能,但會影響排序鍵的長度。

可能的值為

範例 #3 CASE_FIRST 規則

  • C=X 或 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 規則

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

Collator::NORMALIZATION_MODE 整數

Normalization 設定決定在比較時是否要完整正規化文字。即使設定為 off(許多地區設定的預設值),以常用方式表示的文字也能正確比較(詳情請參閱 UTN #5)。只有當重音符號的順序不符合標準規範時,才會出現問題。如果設定為 On,則可保證所有可能的文字輸入都能獲得最佳結果。如果此屬性為 On,則字串比較效能會根據需要正規化的序列的頻率而產生中等程度的成本。排序鍵長度沒有顯著影響。如果已知輸入文字為 NFD 或 NFKD 正規化格式,則無需啟用此正規化選項。

可能的值為

Collator::STRENGTH 整數

ICU 排序服務支援多個比較層級(稱為「層級」,也稱為「強度」)。這些類別使 ICU 能夠根據當地慣例精確排序字串。然而,透過允許選擇性地使用這些層級,可以在文字中搜尋字串,並使用各種不同的比對條件。如需更詳細的資訊,請參閱 collator_set_strength() 章節。

可能的值為

Collator::HIRAGANA_QUATERNARY_MODE 整數

與 JIS x 4061 的相容性需要引入額外的層級來區分平假名和片假名字元。如果需要與該標準相容,則應將此屬性設定為 On,並將強度設定為 Quaternary。這會影響排序鍵長度和字串比較效能。

可能的值為

Collator::NUMERIC_COLLATION 整數 (int)

啟用此屬性後,會為數字子字串的數值生成排序鍵。這是一種讓 '100' 排在 '2' 之後的方法。

可能的值為

Collator::DEFAULT_VALUE 整數 (int)
Collator::PRIMARY 整數 (int)
Collator::SECONDARY 整數 (int)
Collator::TERTIARY 整數 (int)
Collator::DEFAULT_STRENGTH 整數 (int)
Collator::QUATERNARY 整數 (int)
Collator::IDENTICAL 整數 (int)
Collator::OFF 整數 (int)
Collator::ON 整數 (int)
Collator::SHIFTED 整數 (int)
Collator::NON_IGNORABLE 整數 (int)
Collator::LOWER_FIRST 整數 (int)
Collator::UPPER_FIRST 整數 (int)
Collator::SORT_REGULAR 整數 (int)

Collator::SORT_STRING 整數 (int)

Collator::SORT_NUMERIC 整數 (int)

更新日誌

版本 說明
8.4.0 類別常數現在已加上類型。

目錄

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top