[原创]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中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 PHP
PHP面试题之文件目录操作
Oct 15 PHP
PHP异常处理Exception类
Dec 11 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP中include和require的区别实例分析
May 07 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 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 危险函数解释 分析
2009/04/22 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
python使用pymysql实现操作mysql
2016/09/13 Python
python入门教程 python入门神图一张
2018/03/05 Python
python实现求特征选择的信息增益
2018/12/18 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
化工专业个人的求职信范文
2013/11/28 职场文书
促销活动方案模板
2014/02/24 职场文书
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS