[原创]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 相关文章推荐
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
基于php-fpm的配置详解
Jun 03 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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性能优化准备篇图解PEAR安装
2011/12/05 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python重新引入被覆盖的自带function
2014/07/16 Python
Python中的choice()方法使用详解
2015/05/15 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
公司应聘求职信
2014/06/21 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
个人务虚会发言材料
2014/10/20 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
JS class语法糖的深入剖析
2022/07/07 Javascript