需求里结算首页需要按门店的首字母A-Z排序。我的数据结构原本是这样的:

Array
(
[0] => Array
(
[sid] => 2885842
[recetcstoredpay] => 24000
[recetclprinciple] => 23465
[paytcstoredpay] => 5455
[paytclprinciple] => 34900
[sname] => 百宴餐饮---便宜坊烤鸭店
) [1] => Array
(
[sid] => 3644191
[recetcstoredpay] => 89200
[recetclprinciple] => 406930
[paytcstoredpay] => 4090
[paytclprinciple] => 97800
[sname] => 大长秋餐饮中心
) [2] => Array
(
[sid] => 5229673
[recetcstoredpay] => 26000
[recetclprinciple] => 45930
[paytcstoredpay] => 24795
[paytclprinciple] => 121800
[sname] => 大众点评网
) [3] => Array
(
[sid] => 3715927
[recetcstoredpay] => 13600
[recetclprinciple] => 56930
[paytcstoredpay] => 5710
[paytclprinciple] => 37800
[sname] => 江东北路店
) [4] => Array
(
[sid] => 3671092
[recetcstoredpay] => 1280
[recetclprinciple] => 46930
[paytcstoredpay] => 128090
[paytclprinciple] => 149800
[sname] => 金凤区新馆
) [5] => Array
(
[sid] => 1858783
[recetcstoredpay] => 2040
[recetclprinciple] => 4465
[paytcstoredpay] => 245
[paytclprinciple] => 4900
[sname] => 浙江西子宾馆
) [6] => Array
(
[sid] => 16832117
[recetcstoredpay] => 81600
[recetclprinciple] => 470930
[paytcstoredpay] => 506090
[paytclprinciple] => 8000
[sname] => 欢乐谷店
) )

根据需求,要根据sname的第一个汉字首字母排序,那么就先需要写一个取首字母的方法:

/**
* 取汉字的第一个字的首字母
* @param type $str
* @return string|null
*/
public function _getFirstCharter($str){
if(emptyempty($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;
}

然后下一步,要对这个二维数据排序。我思考了很久,后来想到了方案,先在循环里调用这个取首字母的方法,然后以这个字母作为key,因为php里有根据key排序的方法,所以我的代码写成这样就搞定了:

//门店名称
$shopData = $this->_shopNamesArray; //根据门店名称第一个汉字的首字母正序排序
$settles = $result['data']; $settlesRes = array();
foreach ($settles as $sett) {
$sname = $shopData[$sett['sid']];
$sett['sname'] = $sname;
$snameFirstChar = $this->_getFirstCharter($sname); //取出门店的第一个汉字的首字母
$settlesRes[$snameFirstChar] = $sett;//以这个首字母作为key
}
ksort($settlesRes); //对数据进行ksort排序,以key的值升序排序

先把这些数据print出来看效果:

Array
(
[B] => Array
(
[sid] => 2885842
[recetcstoredpay] => 24000
[recetclprinciple] => 23465
[paytcstoredpay] => 5455
[paytclprinciple] => 34900
[sname] => 百宴餐饮---便宜坊烤鸭店
) [D] => Array
(
[sid] => 5229673
[recetcstoredpay] => 26000
[recetclprinciple] => 45930
[paytcstoredpay] => 24795
[paytclprinciple] => 121800
[sname] => 大众点评网
) [H] => Array
(
[sid] => 16832117
[recetcstoredpay] => 81600
[recetclprinciple] => 470930
[paytcstoredpay] => 506090
[paytclprinciple] => 8000
[sname] => 欢乐谷店
) [J] => Array
(
[sid] => 3671092
[recetcstoredpay] => 1280
[recetclprinciple] => 46930
[paytcstoredpay] => 128090
[paytclprinciple] => 149800
[sname] => 金凤区新馆
) [Z] => Array
(
[sid] => 1858783
[recetcstoredpay] => 2040
[recetclprinciple] => 4465
[paytcstoredpay] => 245
[paytclprinciple] => 4900
[sname] => 浙江西子宾馆
) )

php里获取第一个中文首字母并排序的更多相关文章

  1. 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M ...

  2. PHP获取中文首字母的函数

    PHP获取中文首字母的函数 <?php header("Content-type: text/html; charset=utf-8"); function getFirst ...

  3. Java获取中文拼音、中文首字母缩写和中文首字母

    获取中文拼音(如:广东省 -->guangdongsheng) /** * 得到中文全拼 * @param src 需要转化的中文字符串 * @return */ public static S ...

  4. C# 获取汉字的拼音首字母和全拼(含源码)

    C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...

  5. C#获取汉字拼音和首字母

    C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...

  6. php按照中文首字母排序

    1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) ...

  7. Java中实现对集合中对象按中文首字母排序

    有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...

  8. (转载)delphi中获取汉字的拼音首字母

    delphi中获取汉字的拼音首字母1.py: array[216..247] of string = ({216}'CJWGNSPGCGNESYPB' + 'TYYZDXYKYGTDJNMJ' + ' ...

  9. mysql排序的中文首字母排序和自定义排序

    select * FROM organ_new where city_code = 'SZ0755' and organ_type = 'H' and state = '1' ORDER BY FIE ...

随机推荐

  1. 苹果手机input框上方有一条阴影线以及input框的placeholder颜色的设置

    今天做手机端的时候,用到input框来输入手机号码,但是在安卓手机上input的效果是正常的,在苹果手机上,input的上边框会变粗,有阴影 因为苹果手机的默认给input加上了阴影 给input加入 ...

  2. CF 1070J Streets and Avenues in Berhattan

    DP的数组f其实开得不够大,应该开200000,但是它在cf上就是过了... 题意是把一堆字母分别分配到行和列. 分析一下,答案实际上只和n行中和m列中每种字母分配的个数有关.而且答案只和" ...

  3. JavaFile类和递归

    八.File类和递归 8.1 概述 java.io.File 类时文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和产出等操作. 8.2 构造方法 public File(String pa ...

  4. 详细理解servlet实现的三种方式和生命周期

    阅读目录 开发servlet的三种方式 理解实现servlet接口的方式,理解servlet生命周期 Servlet接口有五个方法 继承GenericServlet 继承HttpServlet 现在很 ...

  5. MySQL5.7安装(RPM)笔记

    1. 检查MySQL是否安装,如果有安装,则移除(rpm –e 名称)[root@localhost ~]# rpm -qa | grep -i mysqlmysql-libs-xxxxxxxxxx. ...

  6. 洛谷P3380 【模板】二逼平衡树(树套树,树状数组,线段树)

    洛谷题目传送门 emm...题目名写了个平衡树,但是这道题的理论复杂度最优解应该还是树状数组套值域线段树吧. 就像dynamic ranking那样(蒟蒻的Sol,放一个link骗访问量233) 所有 ...

  7. 洛谷P3613 睡觉困难综合征(LCT,贪心)

    洛谷题目传送门 膜拜神犇出题人管理员!!膜拜yler和ZSY!! 没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来 这里最好还是写树剖吧,不过我 ...

  8. AtCoder Grand Contest 006

    AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...

  9. 【JLOI 2012】时间流逝(期望,树上高斯消元)

    题目链接 这是一道传统的期望题,可是有一些套路值得我去掌握. 我们用$s$来表示一种状态,就是当前拥有的能量圈,是一个正整数拆分的形式. 用$f_{s}$表示如果遇到果冻鱼后丢掉了最小的能量圈后的状态 ...

  10. luogu1351 [NOIp2014]联合权值 (dfs)

    有两种情况:一个点到它的父亲的父亲(要算两次).一个点的子节点之间互相到达 #include<bits/stdc++.h> #define pa pair<int,int> # ...