[原创]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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
通俗易懂的php防注入代码
Apr 07 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
php生成与读取excel文件
Oct 14 PHP
php图形jpgraph操作实例分析
Feb 22 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 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 include加载文件两种方式效率比较
2010/08/08 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
php socket通信简单实现
2016/11/18 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python实现定时播放mp3
2015/03/29 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
排查整治工作方案
2014/06/09 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
单位实习介绍信
2015/05/05 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL