[原创]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概述.
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Nov 25 PHP
PHP 手机归属地查询 api
Feb 08 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php+highchats生成动态统计图
May 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 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
用户的详细注册和判断
2006/10/09 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
php中strtotime函数性能分析
2016/11/20 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
Python语言进阶知识点总结
2019/05/28 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python 内置函数汇总详解
2019/09/16 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
python3.8下载及安装步骤详解
2020/01/15 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
python如何随机生成高强度密码
2020/08/19 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
结婚喜宴主持词
2014/03/14 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript