php里获取第一个中文首字母并排序
需求里结算首页需要按门店的首字母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里获取第一个中文首字母并排序的更多相关文章
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M ...
- PHP获取中文首字母的函数
PHP获取中文首字母的函数 <?php header("Content-type: text/html; charset=utf-8"); function getFirst ...
- Java获取中文拼音、中文首字母缩写和中文首字母
获取中文拼音(如:广东省 -->guangdongsheng) /** * 得到中文全拼 * @param src 需要转化的中文字符串 * @return */ public static S ...
- C# 获取汉字的拼音首字母和全拼(含源码)
C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...
- C#获取汉字拼音和首字母
C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...
- php按照中文首字母排序
1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) ...
- Java中实现对集合中对象按中文首字母排序
有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...
- (转载)delphi中获取汉字的拼音首字母
delphi中获取汉字的拼音首字母1.py: array[216..247] of string = ({216}'CJWGNSPGCGNESYPB' + 'TYYZDXYKYGTDJNMJ' + ' ...
- mysql排序的中文首字母排序和自定义排序
select * FROM organ_new where city_code = 'SZ0755' and organ_type = 'H' and state = '1' ORDER BY FIE ...
随机推荐
- beta 圆桌 3
2018-12-16图片缺失,当日数据: 总工作量:24 已完成:5 剩余:19 031602111 傅海涛 1.今天进展 实时字幕的实现大概 2.存在问题 实时字幕存在不稳定和耗费资源 3.明天安排 ...
- PAT 甲级 1096 Consecutive Factors
https://pintia.cn/problem-sets/994805342720868352/problems/994805370650738688 Among all the factors ...
- PHP4个载入语句的区别
4个载入语句的区别 include和require的区别: include载入文件失败时(即没有找到该文件),报一个“提示错误”,然后继续执行后续代码: requre载入文件失败时,报错并立即终止执行 ...
- ES6学习笔记(一):变量赋值和基本数据类型
let和const let和const不存在变量提升 变量一定要在声明后使用,否则报错. var a = []; for (var i = 0; i < 10; i++) { a[i] = fu ...
- js保留两位小数方法总结
js保留两位小数方法总结 最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求.问题是,当用户离开文本框时,我需要将用 ...
- BZOJ4036 HAOI2015按位或(概率期望+容斥原理)
考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S& ...
- Mac中把光盘转存为iso文件
因为Mac是类Unix的,因此,dd命令同样适用于Mac,那么,就很简单了,复习一下dd的用法而已 [xiaosilent@rmbp Volumes]$ drutil status Vendor Pr ...
- spring data jpa createNativeQuery 错误 Unknown entity
springdatajpa本地查询的时候,报错:org.hibernate.MappingException: Unknown entity: com.hzxc.guesssong.model.Que ...
- pat1001. Battle Over Cities - Hard Version 解题报告
/**题目:删去一个点,然后求出需要增加最小代价的边集合生成连通图思路:prim+最小堆1.之前图中未破坏的边必用,从而把两两之间可互达的点集合 合并成一个点2.求出不同点集合的最短距离,用prim+ ...
- 使用pandas导入csv文件到MySQL
之前尝试过用命令行来解决csv文件导入到MySQL这个问题,没想到一直没有成功.之后会继续更新的吧,现在先用pandas来解决这个问题,虽然会复杂一点,但至少能用. 例子是导入movielens的ra ...