1. /**
  2. * 将数组按字母A-Z排序
  3. * @return [type] [description]
  4. */
  5. private function chartSort($list)
  6. {
  7. // $user=$this->user;
  8. $data = [];
  9. foreach ($list as $k => $v) {
  10. $v['letter'] = $this->getFirstChart($v['name']);
  11. if (empty($data[$v['letter']])) {
  12. $data[$v['letter']] = [];
  13. }
  14. $data[$v['letter']][] = $v;
  15. }
  16.  
  17. $i = 0;
  18. foreach ($data as $k => $v) {
  19. $li[$i]['letter'] = $k;
  20. $li[$i]['list'] = $v;
  21. $i++;
  22. }
  23. sort($li);
  24. return $li;
  25. }
  26. /**
  27. * 返回取汉字的第一个字的首字母
  28. * @param  [type] $str [string]
  29. * @return [type]      [strind]
  30. */
  31. private function getFirstChart($str){
  32. if( empty($str) ){
  33. return '';
  34. }
  35. $char=ord($str[0]);
  36. if( $char >= ord('A') && $char <= ord('z') ){
  37. return strtoupper($str[0]);
  38. }
  39. $s1=iconv('UTF-8','gb2312',$str);
  40. $s2=iconv('gb2312','UTF-8',$s1);
  41. $s=$s2==$str?$s1:$str;
  42. $asc=ord($s{0})*256+ord($s{1})-65536;
  43. if($asc>=-20319&&$asc<=-20284) return 'A';
  44. if($asc>=-20283&&$asc<=-19776) return 'B';
  45. if($asc>=-19775&&$asc<=-19219) return 'C';
  46. if($asc>=-19218&&$asc<=-18711) return 'D';
  47. if($asc>=-18710&&$asc<=-18527) return 'E';
  48. if($asc>=-18526&&$asc<=-18240) return 'F';
  49. if($asc>=-18239&&$asc<=-17923) return 'G';
  50. if($asc>=-17922&&$asc<=-17418) return 'H';
  51. if($asc>=-17417&&$asc<=-16475) return 'J';
  52. if($asc>=-16474&&$asc<=-16213) return 'K';
  53. if($asc>=-16212&&$asc<=-15641) return 'L';
  54. if($asc>=-15640&&$asc<=-15166) return 'M';
  55. if($asc>=-15165&&$asc<=-14923) return 'N';
  56. if($asc>=-14922&&$asc<=-14915) return 'O';
  57. if($asc>=-14914&&$asc<=-14631) return 'P';
  58. if($asc>=-14630&&$asc<=-14150) return 'Q';
  59. if($asc>=-14149&&$asc<=-14091) return 'R';
  60. if($asc>=-14090&&$asc<=-13319) return 'S';
  61. if($asc>=-13318&&$asc<=-12839) return 'T';
  62. if($asc>=-12838&&$asc<=-12557) return 'W';
  63. if($asc>=-12556&&$asc<=-11848) return 'X';
  64. if($asc>=-11847&&$asc<=-11056) return 'Y';
  65. if($asc>=-11055&&$asc<=-10247) return 'Z';
  66. return null;
  67. }

【PHP】数组按照字母排序的更多相关文章

  1. 086-PHP数组按数字排序和按字母排序

    <?php $arr=array(2,54,167,'a','A','12'); //定义一个数组 echo '数组排序之前的信息:<br />'; print_r($arr); / ...

  2. [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能

      感谢eoe社区的分享   最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...

  3. php数组的各种排序

    转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/11/2207494.html 如果你已经使用了一段时间PHP的话,那么,你应 ...

  4. 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。

      package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...

  5. Android 联系人字母排序(仿微信)

    现在很多APP只要涉及到联系人的界面,几乎都会采取字母排序以及导航的方式.作为程序猿,这种已经普及的需求还是需要学习的,于是小生开始了在网上默默的学习之路,网上学习的资料质量参差不齐,不过也有很不错的 ...

  6. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  7. Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

    转载:http://blog.csdn.net/xiaanming/article/details/12684155 转载请注明出处:http://blog.csdn.net/xiaanming/ar ...

  8. 数组Array.sort()排序的方法

    数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序( ...

  9. PHP 字符串数组按照拼音排序的问题

    拼音排序的规则: 字符串包括特殊字符.数字.英文字符.中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符ascii码表进行排序,数字字符排在第二梯队,将首个字符数字按照数字大小排序,英 ...

随机推荐

  1. Golang语言系列-15-数据库

    数据库 MySQL 连接数据库 package main import ( "database/sql" "fmt" _ "github.com/go ...

  2. 【错误】element cannot be mapped to a null key

    element cannot be mapped to a null key的解决方法 报错: ERROR [o.a.c.c.C.[.[.[/sa].[dispatcherServlet]] - Se ...

  3. Asp.Net Core Razor页面中使用echarts展示图形

    Asp.Net Core Razor页面中使用echarts展示图形 要在Razor页面中使用echarts显示图形,主要问题点在于如何将数据传递给js文件. 1,下载安装echarts库文件 首先引 ...

  4. Java之Listener

    Java之Listener Listener监听器 监听器有很多种,大部分还是在GUI用的比较多,这里简单记录一点关于HttpSessionListener的 统计session count List ...

  5. Spring中为什么不建议使用字段注入

    在使用Idea中通过注解注入字段时是否遇见过这样一个提示: Field injection is not recommended(不推荐使用字段注入) 一. 什么是字段注入,Spring中依赖注入的方 ...

  6. Django3使用WebSocket实现WebShell

    前言 最近工作中需要开发前端操作远程虚拟机的功能,简称WebShell. 基于当前的技术栈为react+django,调研了一会发现大部分的后端实现都是django+channels来实现websoc ...

  7. .net core 通过动软连接数据库

    .net core 与动软 首先创建asp.net core 或者 .net core 控制台程序.不需急着创建web.config 文件. 通过NuGet加个ado的包 System.Data.Sq ...

  8. 六:使用Cookie进行会话管理

    1.存储客户端的状态 因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器 记住客户端状态 2.会话技术 ...

  9. java web课程设计(简单商城的前后端双系统,基于maven三模块开发)

    1.系统分析 1.1需求分析 实现一个简单但功能完整的商城项目,从设计到实现,规范化完成该项目,锻炼javaweb项目的编写能力,理解软件工程的软件设计思想 1.2编程技术简介 本次课程主要使用的软件 ...

  10. Linkerd 2.10(Step by Step)—控制平面调试端点

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...