[原创]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
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP快速推送微信模板消息
Apr 14 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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实现字符串翻转的方法
2015/03/27 PHP
Yii2单元测试用法示例
2016/11/12 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
js实现拖拽功能
2017/03/01 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
详解Python学习之安装pandas
2019/04/16 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
基于python监控程序是否关闭
2020/01/14 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
python如何实现单链表的反转
2020/02/10 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
机关节能减排实施方案
2014/03/17 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
德劲DE1108畅想
2021/04/22 无线电
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS