(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
強度。只有在需要忽略標點符號或處理日文文字時才應使用第四層級(請參閱平假名處理)。
完全相同層級:當所有其他層級都相同時,將使用完全相同層級作為決勝層級。在此層級中,會比較每個字串 NFD 格式的 Unicode 字碼點值,以防層級 1-4 中沒有差異。例如,希伯來語吟唱標記僅在此層級中會被區分。應謹慎使用此層級,因為兩個字串之間僅存在字碼點值的差異是極少發生的情況。使用此層級會大幅降低增量比較和排序鍵生成的效能(同時也會增加排序鍵的長度)。這也稱為 level 5
強度。
例如,使用者在搜尋文字時可能會選擇忽略重音符號或忽略重音符號和大小寫。幾乎所有字元都可透過前三個層級區分,因此在大多數地區設定中,預設值為第三層級。但是,如果將「替代」設定為「已移位」,則可以使用第四層級來區分原本會被忽略的空格、標點符號和符號。如果需要非常精細的字元區分,則可以使用完全相同強度(例如,完全相同強度可以區分數學粗體小寫 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', )