[原创]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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP ajax 分页类代码
Nov 13 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 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中的比较运算符详解
2013/10/28 PHP
php实现复制移动文件的方法
2015/07/29 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
几种tab切换详解
2017/02/03 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
vue做网页开场视频的实例代码
2017/10/20 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
python之yield表达式学习
2014/09/02 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Numpy之random函数使用学习
2019/01/29 Python
Django stark组件使用及原理详解
2019/08/22 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
2014年惩防体系建设工作总结
2014/12/01 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
瘦西湖导游词
2015/02/03 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
Python数据结构之队列详解
2022/03/21 Python
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技