PHP中国际化的字符串比较对象

在 PHP 中,国际化的功能非常丰富,包括很多我们可能都不知道的东西其实都非常有用,比如说今天要介绍的这一系列的字符排序和比较的功能。

排序

正常来说,如果我们对数组中的字符进行排序,按照的是字符的 ASC2 表的顺序进行排列,如果是英文还好,但对于中文的话,排序出来的结果会是非常懵逼的。

$arr = ['我','是','硬','核','项', '目', '经', '理'];
sort($arr);
var_dump( $arr );
// array(8) {
//     [0]=>
//     string(3) "我"
//     [1]=>
//     string(3) "是"
//     [2]=>
//     string(3) "核"
//     [3]=>
//     string(3) "理"
//     [4]=>
//     string(3) "目"
//     [5]=>
//     string(3) "硬"
//     [6]=>
//     string(3) "经"
//     [7]=>
//     string(3) "项"
//   }

按照我们的习惯会以中文的拼音来对汉字进行排序,这个时候往往大家都会选择自己写排序的算法或者去找合适的 Composer 包。其实,PHP 中已经为我们准备了一个对象就是用来处理这类问题的。

$coll = new Collator( 'zh_CN' );
$coll->sort($arr);
var_dump( $arr );
// array(8) {
//     [0]=>
//     string(3) "核"
//     [1]=>
//     string(3) "经"
//     [2]=>
//     string(3) "理"
//     [3]=>
//     string(3) "目"
//     [4]=>
//     string(3) "是"
//     [5]=>
//     string(3) "我"
//     [6]=>
//     string(3) "项"
//     [7]=>
//     string(3) "硬"
//   }

没错,正是这个 Collator 类。它在实例化的时候需要指定当前的区域,比如我们指定为 zh_CN ,也就是中文字符区域,这时候再使用它的 sort() 方法就可以完成对中文字符的拼音排序。(

PHP中国际化的字符串比较对象