[原创]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 date函数参数详解
Nov 27 PHP
10个实用的PHP代码片段
Sep 02 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python 美化输出信息的实例
2018/10/15 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python 音频生成器的实现示例
2019/12/24 Python
Tensorflow累加的实现案例
2020/02/05 Python
python上selenium的弹框操作实现
2020/07/13 Python
思想汇报范文
2013/11/04 职场文书
新农村建设典型材料
2014/05/31 职场文书
平安建设汇报材料
2014/12/29 职场文书
房屋认购协议书
2015/01/29 职场文书
公司地址变更通知
2015/04/25 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript