ICU(International Components for Unicode)里提供了transliterator(直译器),
可以很方便把其他语言(比如简体中文)转为拉丁文表示:
http://cn2.php.net/manual/zh/transliterator.transliterate.php
Transliterator: allows getting latin representation of strings in various languages.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

//文件编码要求是Unicode

header('Content-Type: text/html; charset=utf-8');

echo transliterator_transliterate('Any-Latin', '中华有为');

//输出 zhōng huá yǒu wèi

echo transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', '中华有为');

//输出 zhong hua you wei

echo transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', '中华有为');

//输出 ZHONG HUA YOU WEI

echo transliterator_transliterate('Any-Latin', '重阳');

//输出 zhòng yáng (错误,多音字还是坑)

苹果上的CFStringTransform/kCFStringTransformToLatin汉字转拼音也是通过ICU transform实现的:
http://userguide.icu-project.org/transforms/general#TOC-ICU-Transliterators
http://nshipster.com/cfstringtransform/

使用php5-intl(依赖ICU:libicu52)的简体中文(zh_CN)排序器collator按拼音排序:
http://cn2.php.net/manual/zh/collator.sort.php
php-src/ext/intl --enable-intl --with-icu-dir=DIR
相关: MySQL数据表排序规则COLLATE=utf8_general_ci

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?php

header('Content-Type: text/html; charset=utf-8');

$coll = collator_create('zh_CN');

$arr = array('中国','华山','华夏','中华','重阳','重量','b','a',2,1);

collator_sort($coll, $arr);

var_export($arr);

//输出(可见汉字按照拼音排序,但不能识别多音字"重"):

array (

  0 => 'a',

  1 => 'b',

  2 => '华山',

  3 => '华夏',

  4 => '中国',

  5 => '中华',

  6 => '重量',

  7 => '重阳',

  8 => 1,

  9 => 2,

)

如果元素1和2加上引号变成字符串类型的话,则1和2排序后会出现在开头.
查看已经安装的软件包目录文件结构:
dpkg -L libicu52:amd64
/usr/lib/x86_64-linux-gnu/libicu*
/usr/lib/x86_64-linux-gnu/libicudata.so.52.1 动态库23MB
/usr/lib/x86_64-linux-gnu/libicudata.a 静态库23MB
Windows上则是:
php\icu*.dll
php\ext\php_intl.dll

下面实现了常用的按汉字拼音首字母分组排序的功能:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<?php

header('Content-Type: text/html; charset=utf-8');

$arr = array('百度知道','阿里云','百度百科','阿里巴巴');

$coll = collator_create('zh_CN');

collator_sort($coll, $arr);

var_export($arr);

//输出 array ( 0 => '阿里巴巴', 1 => '阿里云', 2 => '百度百科', 3 => '百度知道', )

$tmp = array();

foreach($arr as $v) {

    $pinyin = transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', $v);

    $tmp[substr($pinyin, 0, 1)][] = $v;

}

var_export($tmp);

//输出

array (

  'A' =>

  array (

    0 => '阿里巴巴',

    1 => '阿里云',

  ),

  'B' =>

  array (

    0 => '百度百科',

    1 => '百度知道',

  ),

)

附:
ls命令,Linux和Windows的文件管理器,显示如下:
1 2 a b 华山 华夏 中国 中华 重量 重阳
数字,字母,汉字(按拼音排序,但不能识别多音字)
汉字方面,下面的自然排序跟上面有所不同:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

header('Content-Type: text/plain; charset=utf-8');

$arr = array('中国','华山','华夏','中华','重阳','重量','b','a',2,1);

natsort($arr); // 等价于 uasort($arr, function($a, $b) { return strnatcmp($a, $b); });

var_export($arr);

//输出(自然排序下汉字并没有按照拼音进行排序):

array (

  9 => 1,

  8 => 2,

  7 => 'a',

  6 => 'b',

  3 => '中华',

  0 => '中国',

  2 => '华夏',

  1 => '华山',

  5 => '重量',

  4 => '重阳',

)

几种排序的比较:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

header('Content-Type: text/plain; charset=utf-8');

$arr = explode(' ', '1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中');

shuffle($arr); //打乱数组

//collator_sort(collator_create('zh_CN'), $arr);

//usort($arr, function($a, $b) { return strnatcmp($a, $b); });

usort($arr, function($a, $b) { return strcmp($a, $b); });

echo implode(' ',$arr);

exit();

?>

ls排序:

1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中

collator_sort(zh_CN)排序(类似Windows/Linux桌面文件管理器里的默认按名称上升排列):

1 11 12 111 112 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中

strnatcmp排序:

1 11 12 111 112 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里

strcmp排序:

1 11 111 112 12 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里

转载于:https://my.oschina.net/u/3268486/blog/2208802

PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序相关推荐

  1. php根据汉字首字母分组,利用PHP获取汉字首字母并且分组排序详解

    前言 本文主要给大家介绍了关于PHP获取汉字首字母并分组排序的相关内容,因经常我们在做项目的时候,会有按首字母排序的需求 比如: 美团的城市选择 http://www.meituan.com/inde ...

  2. SQL Server根据汉字笔划和取得拼音首字母进行排序

    做房产网站,已经有了小区模板表,将小区的名称一律输入数据表中供登记用户进行选择.发现一个排序的问题:小区名称加载至下拉列表中时默认只是按照主键进行了升序排序,无任何规律,名称找起来非常麻烦.如何按小区 ...

  3. php 汉字按字母排序,在PHP中,将一个汉字数组按照拼音首字母进行排序

    (之前发的这篇博文因为含有敏感关键字,只好重发一遍了) $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲线回到原点.&qu ...

  4. mysql 实现按首字母字典序排序以及根据字段汉字首字母搜索

    目录 mysql 实现按首字母字典序排序 mysql 根据字段汉字首字母搜索 mysql 实现按首字母字典序排序 mysql 一个表中的某一个字段存储的是人的名字 name 字符编码utf8_gene ...

  5. php 将中文字符转英文字母_PHP实现将汉字转换为拼音及获取词语首字母的方法...

    本文实例讲述了PHP实现将汉字转换为拼音及获取词语首字母的方法.分享给大家供大家参考,具体如下: 最近要开发将汉字转换为拼音和得到首字的功能记录下来哈子:呵呵~ class Pinyin{ priva ...

  6. sql根据汉字内容自动产生拼音和五笔首字母

    CREATE FUNCTION fun_hong_py(@nr VARCHAR(1000)) RETURNS @temp TABLE(pyall VARCHAR(10),wball VARCHAR(1 ...

  7. .net core通过PinYinConverterCore实现汉字转拼音,获取中文字符串首字母

    文章目录 一.事故现场 二.解决方法 1.安装方法 2.代码示例 #中文转拼音 #获取中文字符串首字母 一.事故现场 项目之前使用的.net framework,可以通过引用 Microsoft.In ...

  8. android 仿微信联系人 首字母分组快速索引

    总结是一种习惯,不能停,一停人就懒了,都快一个月没有写了!该提提神了! 进入正题:android 仿微信联系人 首字母快速索引,先用下美团的索引效果图: 1.自定义View字母索引栏(右边那一列): ...

  9. 对汉字依据首字母进行排序

    JDK自带的Collator包含的汉字太少,对一些生僻的姓氏不能进行排序.推荐使用: com.ibm.icu.text.Collator <dependency><groupId&g ...

最新文章

  1. php ImageMagick扩展
  2. 给用户培训的几点感受
  3. html5能实现网络游戏吗,kbengine + cocos2d_js实现html5网络游戏mmorpg(全套代码+资源)...
  4. 经典题:poj2104-区间第k小 整体二分学习
  5. 面试官:数据量大的情况下分页查询很慢,有什么优化方案?
  6. log4j的相关jar包总结
  7. 微信小程序 | 来自小程序开发者的实例教程 ①
  8. 电子计算机厂 四月份生产计,一题多解 分数和百分数应用题(1)
  9. nvme命令中prp_linux里的nvme驱动代码分析(加载初始化)
  10. 阿里云手机号短信设置
  11. 最新计算机java毕业设计题目选题推荐2023
  12. 计算机系统时间设置打不开,电脑时间或日期不对的修改方式
  13. 计算机硬件和系统重装,重装系统对电脑有什么影响【图文】
  14. 上海科技大学信息科学与技术学院夏令营
  15. 基于go websocket写一个聊天室
  16. 北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创
  17. 懒人教你用猕猴桃一月饱减16斤_过路老熊_新浪博客
  18. bc vc投资_【融资系列】 VC投资中的常见分期追加投资
  19. C++实现RS485通信
  20. [英语]在英语学习的过程中学到的学习方法

热门文章

  1. 《海外社交媒体营销》导读
  2. 用计算机表达爱你,表达我爱你的简短句子
  3. 零基础学习PHP编程——详解Apache、PHP和Mysql之间的关系
  4. Plt 绘制 直方图 散点图 折线图 扇形图
  5. 整数数据类型tinyint
  6. (附源码)计算机毕业设计SSM二手交易平台
  7. uC/OS-II 移植 内核系统裁剪os_cfg.h
  8. 如何用subtitle edit 将英文字幕转换成中文字幕
  9. 【机房】概要设计说明书
  10. 一个乞丐的超强生意经