(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Collator::setStrength -- collator_set_strength — 设置校对强度
面向对象风格
过程化风格
ICU 校对服务支持多种比较级别(称为“级别”,但也称为“强度”)。这些类别使 ICU 能够根据本地约定精确地对字符串进行排序。但是,通过允许选择性地使用这些级别,可以在文本中搜索字符串时使用各种匹配条件。
主级别:通常,这用于表示基本字符之间的差异(例如,“a” < “b”)。它是最大的差异。例如,字典按基本字符划分为不同的部分。这也被称为级别 1
强度。
次级别:字符中的重音被认为是次要差异(例如,“as” < “às” < “at”)。根据语言的不同,字母之间的其他差异也可以被视为次要差异。当字符串中的任何位置存在主差异时,次要差异将被忽略。这也被称为级别 2
强度。
注意:
注意:在某些语言(例如丹麦语)中,某些带重音的字母被认为是单独的基本字符。但是,在大多数语言中,带重音的字母与其未带重音的版本相比仅存在次要差异。
三级:字符的大小写差异在三级中区分(例如,“ao” < “Ao” < “aò”)。此外,字母的变体在三级上与基本形式不同(例如“a”和“𝒶”)。另一个示例是大片假名和小片假名之间的差异。当字符串中的任何位置存在主差异或次要差异时,三级差异将被忽略。这也被称为级别 3
强度。
四级:当标点符号在级别 1-3 中被忽略(请参阅忽略标点符号)时,可以使用一个额外的级别来区分有和没有标点符号的单词(例如,“ab” < “a-b” < “aB”)。当存在主、次或三级差异时,此差异将被忽略。这也被称为级别 4
强度。只有在需要忽略标点符号或处理日语文本时(请参阅平假名处理),才应使用四级。
相同级别:当所有其他级别都相等时,相同级别将用作区分因素。在此级别比较每个字符串 NFD 形式的 Unicode 代码点值,以防级别 1-4 没有差异。例如,希伯来语的音调标记仅在此级别区分。此级别应谨慎使用,因为两个字符串之间仅存在代码点值差异的情况非常罕见。使用此级别会大大降低增量比较和排序键生成的性能(以及增加排序键的长度)。它也被称为级别 5
强度。
例如,人们可以选择在搜索文本时忽略重音或忽略重音和大写。几乎所有字符都由前三个级别区分,并且在大多数区域设置中,默认值为三级。但是,如果将 Alternate 设置为 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', )