[原创]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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP中命名空间的使用例子
Mar 22 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
laravel框架语言包拓展实现方法分析
Nov 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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP教程 变量定义
2009/10/23 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
js 调用父窗口的具体实现代码
2013/07/15 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python numpy 点数组去重的实例
2018/04/18 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
详解Python yaml模块
2020/09/23 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
旅游管理毕业生自荐书
2014/02/02 职场文书
街道社区活动报告
2015/02/05 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang