PHP Conference Japan 2024

Collator::setStrength

collator_set_strength

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

Collator::setStrength -- collator_set_strength设置校对强度

描述

面向对象风格

public Collator::setStrength(int $strength): true

过程化风格

collator_set_strength(Collator $object, int $strength): true

ICU 校对服务支持多种比较级别(称为“级别”,但也称为“强度”)。这些类别使 ICU 能够根据本地约定精确地对字符串进行排序。但是,通过允许选择性地使用这些级别,可以在文本中搜索字符串时使用各种匹配条件。

  1. 主级别:通常,这用于表示基本字符之间的差异(例如,“a” < “b”)。它是最大的差异。例如,字典按基本字符划分为不同的部分。这也被称为级别 1强度。

  2. 次级别:字符中的重音被认为是次要差异(例如,“as” < “às” < “at”)。根据语言的不同,字母之间的其他差异也可以被视为次要差异。当字符串中的任何位置存在主差异时,次要差异将被忽略。这也被称为级别 2强度。

    注意:

    注意:在某些语言(例如丹麦语)中,某些带重音的字母被认为是单独的基本字符。但是,在大多数语言中,带重音的字母与其未带重音的版本相比仅存在次要差异。

  3. 三级:字符的大小写差异在三级中区分(例如,“ao” < “Ao” < “aò”)。此外,字母的变体在三级上与基本形式不同(例如“a”和“𝒶”)。另一个示例是大片假名和小片假名之间的差异。当字符串中的任何位置存在主差异或次要差异时,三级差异将被忽略。这也被称为级别 3强度。

  4. 四级:当标点符号在级别 1-3 中被忽略(请参阅忽略标点符号)时,可以使用一个额外的级别来区分有和没有标点符号的单词(例如,“ab” < “a-b” < “aB”)。当存在主、次或三级差异时,此差异将被忽略。这也被称为级别 4强度。只有在需要忽略标点符号或处理日语文本时(请参阅平假名处理),才应使用四级。

  5. 相同级别:当所有其他级别都相等时,相同级别将用作区分因素。在此级别比较每个字符串 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',
)

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top