[原创]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 相关文章推荐
ip签名探针
Oct 09 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP实现简易blog的制作
Oct 24 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 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
Terran兵种对照表
2020/03/14 星际争霸
PHP调用三种数据库的方法(2)
2006/10/09 PHP
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python 3.x 新特性及10大变化
2015/06/12 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
社区交通安全实施方案
2014/03/22 职场文书
法人委托书的范本格式
2014/09/11 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
小学教师见习总结
2015/06/23 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL