[原创]php实现数组按拼音顺序排序的方法


Posted in PHP onMay 03, 2017

本文实例讲述了php实现数组按拼音顺序排序的方法。分享给大家供大家参考,具体如下:

一、问题:

给定数组要求实现按照其汉字首字母排序:

$pinyin = array(
  array('name'=>'梁朝伟','age'=>23),
  array('name'=>'andy','age'=>24),
  array('name'=>'黎明','age'=>19),
  array('name'=>'郭富城','age'=>20)
);

二、解决方法:

<?php
/*
 * Created on 2017-5-3
 * author: 3water.com
 *
 */
 function zhcnToPinyin($str)//汉字转拼音函数
{
  if(empty($str)){return '';}
  $fchar=ord($str{0});
  if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});
  $s1=iconv('UTF-8','gb2312',$str);
  $s2=iconv('gb2312','UTF-8',$s1);
  $s=$s2==$str?$s1:$str;
  $asc=ord($s{0})*256+ord($s{1})-65536;
  if($asc>=-20319&&$asc<=-20284) return 'A';
  if($asc>=-20283&&$asc<=-19776) return 'B';
  if($asc>=-19775&&$asc<=-19219) return 'C';
  if($asc>=-19218&&$asc<=-18711) return 'D';
  if($asc>=-18710&&$asc<=-18527) return 'E';
  if($asc>=-18526&&$asc<=-18240) return 'F';
  if($asc>=-18239&&$asc<=-17923) return 'G';
  if($asc>=-17922&&$asc<=-17418) return 'H';
  if($asc>=-17417&&$asc<=-16475) return 'J';
  if($asc>=-16474&&$asc<=-16213) return 'K';
  if($asc>=-16212&&$asc<=-15641) return 'L';
  if($asc>=-15640&&$asc<=-15166) return 'M';
  if($asc>=-15165&&$asc<=-14923) return 'N';
  if($asc>=-14922&&$asc<=-14915) return 'O';
  if($asc>=-14914&&$asc<=-14631) return 'P';
  if($asc>=-14630&&$asc<=-14150) return 'Q';
  if($asc>=-14149&&$asc<=-14091) return 'R';
  if($asc>=-14090&&$asc<=-13319) return 'S';
  if($asc>=-13318&&$asc<=-12839) return 'T';
  if($asc>=-12838&&$asc<=-12557) return 'W';
  if($asc>=-12556&&$asc<=-11848) return 'X';
  if($asc>=-11847&&$asc<=-11056) return 'Y';
  if($asc>=-11055&&$asc<=-10247) return 'Z';
  return null;
}
$pinyin = array(
  array('name'=>'梁朝伟','age'=>23),
  array('name'=>'andy','age'=>24),
  array('name'=>'黎明','age'=>19),
  array('name'=>'郭富城','age'=>20)
);
$sort = array();
foreach($pinyin as $key => $item) {
  $py = zhcnToPinyin($item['name']);
  $pinyin[$key]['pinyin'] = $py;
  $sort[] = $py;
}
array_multisort($sort, SORT_ASC, $pinyin);
var_dump($pinyin);
?>

运行结果如下:

array(4) {
 [0]=>
 array(3) {
  ["name"]=>
  string(4) "andy"
  ["age"]=>
  int(24)
  ["pinyin"]=>
  string(1) "A"
 }
 [1]=>
 array(3) {
  ["name"]=>
  string(6) "郭富城"
  ["age"]=>
  int(20)
  ["pinyin"]=>
  string(1) "G"
 }
 [2]=>
 array(3) {
  ["name"]=>
  string(4) "黎明"
  ["age"]=>
  int(19)
  ["pinyin"]=>
  string(1) "L"
 }
 [3]=>
 array(3) {
  ["name"]=>
  string(6) "梁朝伟"
  ["age"]=>
  int(23)
  ["pinyin"]=>
  string(1) "L"
 }
}
PHP 相关文章推荐
PHP新手上路(十二)
Oct 09 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
thinkphp的c方法使用示例
Feb 24 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP浮点数精度问题汇总
May 13 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 #PHP
php中的异常和错误浅析
May 03 #PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 #PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 #PHP
php删除数组指定元素实现代码
May 03 #PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 #PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 #PHP
You might like
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
详解Python中break语句的用法
2015/05/14 Python
分享python数据统计的一些小技巧
2016/07/21 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python实现图片转字符小工具
2019/04/30 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
详解Django CAS 解决方案
2019/10/30 Python
超市后勤自我鉴定
2014/01/17 职场文书
物业保安员岗位职责
2014/03/14 职场文书
高中学生评语大全
2014/04/25 职场文书
社区志愿者活动方案
2014/08/18 职场文书
单位委托书怎么写
2014/09/21 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python