1> 网络上很多php的工具类可以将汉字转为拼音;

2> 将拼音进行排序即可

另一种则是类似mysql转码方式:

  1. 1 foreach ($array as $key=>$value)
  2. 2 {
  3. 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value);
  4. 4 } 1 foreach ($array as $key=>$value)
  5. 2 {
  6. 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value);
  7. 4 }
  8. 5 asort($new_array);
  9. 6 foreach ($new_array as $key=>$value)
  10. 7 {
  11. 8 $array[$key] = iconv('GBK', 'UTF-8', $value);
  12. 9 }
  13. 5 asort($new_array);
  14. 6 foreach ($new_array as $key=>$value)
  15. 7 {
  16. 8 $array[$key] = iconv('GBK', 'UTF-8', $value);
  17. 9 }

综合案列

  1. //按中文首字母排序
  2. function orderByName($userName,$order='asc',$key='jlname'){
  3. foreach($userName as $name){
  4. if(is_array($name))$char = getFirstChar($name[$key]);
  5. elseif(is_string($name))$char= getFirstChar($name);
  6. $nameArray = array();//将姓名按照姓的首字母与相对的首字母键进行配对
  7. if(count($charArray[$char])!=0)$nameArray = $charArray[$char];
  8. array_push($nameArray,$name);
  9. $charArray[$char] = $nameArray;
  10. }
  11. if(strtolower($order)=='asc')ksort($charArray);elseif(strtolower($order)=='desc')krsort($charArray);
  12. $newarr = array();
  13. $i=0;
  14. foreach($charArray as $ck=>$cv){
  15. if(is_array($cv)){
  16. foreach($cv as $cck=>$ccv){
  17. $newarr[$i++] = $ccv;
  18. }
  19. }else{
  20. $newarr[$i++]=$cv;
  21. }
  22. }
  23. /*echo '按首字母排序前:<br>';
  24. print_r($charArray);
  25. //根据键值对排序
  26. echo '按首字母排序后:<br>';
  27. print_r($charArray);*/
  28. return $newarr;
  29. }
  30. //获取中文的首字母
  31. function getFirstChar($s){
  32. $s0 = mb_substr($s,0,1,'utf-8');//获取名字的姓
  33. $s = iconv('UTF-8','GBK', $s0);//将UTF-8转换成GB2312编码
  34. if(ord($s0)>128){//汉字开头,汉字没有以U、V开头的
  35. $asc=ord($s{0})*256+ord($s{1})-65536;
  36. if($asc>=-20319 and $asc<=-20284)return "A";
  37. if($asc>=-20283 and $asc<=-19776)return "B";
  38. if($asc>=-19775 and $asc<=-19219)return "C";
  39. if($asc>=-19218 and $asc<=-18711)return "D";
  40. if($asc>=-18710 and $asc<=-18527)return "E";
  41. if($asc>=-18526 and $asc<=-18240)return "F";
  42. if($asc>=-18239 and $asc<=-17760)return "G";
  43. if($asc>=-17759 and $asc<=-17248)return "H";
  44. if($asc>=-17247 and $asc<=-17418)return "I";
  45. if($asc>=-17417 and $asc<=-16475)return "J";
  46. if($asc>=-16474 and $asc<=-16213)return "K";
  47. if($asc>=-16212 and $asc<=-15641)return "L";
  48. if($asc>=-15640 and $asc<=-15166)return "M";
  49. if($asc>=-15165 and $asc<=-14923)return "N";
  50. if($asc>=-14922 and $asc<=-14915)return "O";
  51. if($asc>=-14914 and $asc<=-14631)return "P";
  52. if($asc>=-14630 and $asc<=-14150)return "Q";
  53. if($asc>=-14149 and $asc<=-14091)return "R";
  54. if($asc>=-14090 and $asc<=-13319)return "S";
  55. if($asc>=-13318 and $asc<=-12839)return "T";
  56. if($asc>=-12838 and $asc<=-12557)return "W";
  57. if($asc>=-12556 and $asc<=-11848)return "X";
  58. if($asc>=-11847 and $asc<=-11056)return "Y";
  59. if($asc>=-11055 and $asc<=-10247)return "Z";
  60. }elseif(ord($s)>=48 and ord($s)<=57){//数字开头
  61. switch(iconv_substr($s,0,1,'utf-8')){
  62. case 1:return "Y";
  63. case 2:return "E";
  64. case 3:return "S";
  65. case 4:return "S";
  66. case 5:return "W";
  67. case 6:return "L";
  68. case 7:return "Q";
  69. case 8:return "B";
  70. case 9:return "J";
  71. case 0:return "L";
  72. }
  73. }else if(ord($s)>=65 and ord($s)<=90){//大写英文开头
  74. return substr($s,0,1);
  75. }else if(ord($s)>=97 and ord($s)<=122){//小写英文开头
  76. return strtoupper(substr($s,0,1));
  77. }else{
  78. return iconv_substr($s0,0,1,'utf-8');//中英混合的词语提取首个字符即可
  79. }
  80. }

mysql实现

如果当前数据库编码是utf-8,则进行转码,转为gbk,gbk默认汉字按照拼音排序存放:

  1. 1 SELECT * FROM USER ORDER BY convert(uname using gbk) ASC

如果当前编码为gbk则:

  1. 1 SELECT FROM USER ORDER BY uname ASC

php按照中文首字母排序的更多相关文章

  1. mysql排序的中文首字母排序和自定义排序

    select * FROM organ_new where city_code = 'SZ0755' and organ_type = 'H' and state = '1' ORDER BY FIE ...

  2. oc中文首字母排序

    oc中文首字母排序 NSArray *arr2=@[@"小雨",@"安安",@"小风",@"荣荣",@"张涛& ...

  3. Java中实现对集合中对象按中文首字母排序

    有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...

  4. java实现按中文首字母排序的方式

    public class ABD { public static void main(String[] args) { //Collator类是用来执行区分语言环境的String比较的,这里是选择CH ...

  5. javascript按中文首字母排序

    resultValue=[ '武汉' , '北京' , '上海' , '天津' ] ; resultValue= resultValue.sort( function compareFunction( ...

  6. mysql中文名字按首字母排序

    在mysql数据库中可以使用GBK编码对中文进行排序,如名字按首字母排序 order by convert(substr(tu.username,1,1) using 'GBK') 其中substr方 ...

  7. php里获取第一个中文首字母并排序

    需求里结算首页需要按门店的首字母A-Z排序.我的数据结构原本是这样的: Array ( [0] => Array ( [sid] => 2885842 [recetcstoredpay] ...

  8. 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M ...

  9. HashMap加入数据后,会自动根据首字母排序

    1.Map<String, ArrayList<XX>> entityHashMap = new HashMap<>(); 然后增加一些数据,会发现根据String ...

随机推荐

  1. 基于ESXI6.5的服务器基本配置(HP DL388 Gen 9)

    最近一段时间由于做毕业设计的原因,一直处于忙碌状态,刚做完毕业设计,导师处于项目的原因,买了一台惠普服务器(人民币1.7万),服务器自带的内存仅有16 G,硬盘也就只有600G,而且磁盘还做了raid ...

  2. Java第二季

    1.封装 (1)概念 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. (2)封装的实现步骤 2.Java中的访问修饰符 3.继承 (1)Ja ...

  3. shell,bash,zsh,console,terminal到底是什么意思,它们之间又是什么关系?

    原文链接 终端(terminal,或者叫物理终端):是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端.虚拟终端:屏幕和键盘只是一个终端,可能不 ...

  4. 配置KindEditor富文本编辑器

    第一步:首先我们要到KindEditor官网下载资源包-点击进入官网下载KindEditor资源包 第二部:在下载完了KindEditor的资源包后解压结构如下图所示: 里面包括集中语言的文件上传后台 ...

  5. 这些 Drawable 的小技巧,你都了解吗?

    一.前言 在 Android 的开发过程中,Drawable 经常会被用到,一般会用 Drawable 为 View 设置一个显示的效果.而在 Android 下,也提供了很多 Drawable 的默 ...

  6. php RAS加密类代码

    通过openssl实现的签名.验签.非对称加解密,需要配合x.509证书(如crt和pem)文件使用. <?php /** * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符 ...

  7. 利用spring,实现package下的类扫描

    项目中需要用到包扫描的情况是很多的,一般是在项目初始化的时候,根据一些条件来对某个package下的类进行特殊处理.现在想实现的功能是,在一个filter或interceptor初始化的时候,扫描指定 ...

  8. 深入理解java虚拟机_第三章(上)----->垃圾收集器与内存分配策略

    1.  前言 这一版块内容比较多,分为两篇文章来做笔记.本文讲述上半部分垃圾收集部分;下一篇文章写内存分配部分. 概述 对象已死吗? 引用技术算法 可达性分析算法 再谈引用 两次标记 回收方法区 2. ...

  9. vue——props的两种常用方法

    vue--props的两种常用方法 1.实现父-->子的通信 举例如下: 父组件 parent.vue <children :channel="object1"> ...

  10. float和double的区别

    1.float是单精度类型,精度有效数字为6位,超出则会四舍五入,取值范围为10的-38次方到10的38次方,float占用存储空间为4个字节. 2.double是双精度类型,精度有效数字为15位,超 ...