(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)。但是,使用高于三级或相同强度的级别会导致排序键显着变长,并且对于相等字符串的字符串比较性能会下降。
示例 #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', )