PHP 字符串数组按照拼音排序的问题
拼音排序的规则:
字符串包括特殊字符、数字、英文字符、中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符ascii码表进行排序,数字字符排在第二梯队,将首个字符数字按照数字大小排序,英文字符排在第三梯队,按照首字母字母表顺序排序,中文字符排在第三梯队,将按照拼音的首字母排序 。(此处不考虑其他语言的字符)。
数据库查询排序:
查询数据库的时候可以将某个字段按照中文排序。如下,将查询结果以name字段排序
SELECT name FROM crm.b_user where name!='' order by convert(name using gbk) asc;
PHP函数中排序:
$array=["中国","大家","宝马",'aaa','电脑','工作','276','##','还是','php','加班','shangxian','hello','345','$name1_utf8'];
usort($array,'mySortArray');
foreach($array as $k=>$v){
echo $v;
echo "<br/>";
}
function mySortArray($name0,$name1){
$array=[$name0,$name1];
foreach ($array as $key=>$value)
{
$new_array[$key] = iconv('UTF-8', 'GBK', $value);
}
asort($new_array);
$array=[];
foreach ($new_array as $key=>$value)
{
$array[]= iconv('GBK', 'UTF-8', $value);
}
if($array[0]===$name1){
return true;
}else{
return false;
}
}
排序结果:
##
$name1_utf8
276
345
aaa
hello
php
shangxian
宝马
大家
电脑
工作
还是
加班
中国
PHP的类中排序:
框架中通常是一个类,下面是在Yii的控制器类中对返回给客户端的数组按照中文排序。
控制器中排序代码如下:
public function actionJimmy(){
$arr=[
[
'id'=>0,
'name'=>'hello'
],
[
'id'=>0,
'name'=>'aaa'
],
[
'id'=>0,
'name'=>'你好'
],
[
'id'=>0,
'name'=>'电脑'
],
[
'id'=>0,
'name'=>'法第三方'
],
[
'id'=>0,
'name'=>'啊啊'
],
[
'id'=>0,
'name'=>'mm'
],
[
'id'=>0,
'name'=>'来了'
], [
'id'=>0,
'name'=>'安抚'
],
[
'id'=>0,
'name'=>'偶发'
],
[
'id'=>0,
'name'=>'爱妃'
],
[
'id'=>0,
'name'=>'群发'
],
[
'id'=>0,
'name'=>'字符'
],
[
'id'=>0,
'name'=>'首个'
],
[
'id'=>0,
'name'=>'记录'
],
];
usort($arr,[$this,'mySortArray']); $this->jsonReturn(0, '排序成功', $arr);
}
/**
* 中文字符排序
* create by jimmy
* 2016/1/8
* @param $friendA比较函数的第一个
* @param $friendB比较函数的第二个
* @return bool返回排序结果
*/
public function mySortArray($friendA, $friendB){
$name0=$friendA['name'];
$name1=$friendB['name'];
$array=[$name0,$name1];
foreach ($array as $key=>$value)
{
$new_array[$key] = iconv('UTF-8', 'GBK', $value);
}
asort($new_array);
$array=[];
foreach ($new_array as $key=>$value)
{
$array[]= iconv('GBK', 'UTF-8', $value);
}
if($array[0]===$name1){
return true;
}else{
return false;
}
}
请求接口返回的json内容为排序后的结果:
{
"code":0,
"msg":"排序成功",
"data":[
{
"id":0,
"name":"aaa"
},
{
"id":0,
"name":"hello"
},
{
"id":0,
"name":"mm"
},
{
"id":0,
"name":"啊啊"
},
{
"id":0,
"name":"爱妃"
},
{
"id":0,
"name":"安抚"
},
{
"id":0,
"name":"电脑"
},
{
"id":0,
"name":"法第三方"
},
{
"id":0,
"name":"记录"
},
{
"id":0,
"name":"来了"
},
{
"id":0,
"name":"你好"
},
{
"id":0,
"name":"偶发"
},
{
"id":0,
"name":"群发"
},
{
"id":0,
"name":"首个"
},
{
"id":0,
"name":"字符"
}
]
}
PHP 字符串数组按照拼音排序的问题的更多相关文章
- java字符串数组进行大小排序
若是将两个字符串直接比较大小,会包:The operator > is undefined for the argument type(s) java.lang.String, java.lan ...
- 6种字符串数组的java排序 (String array sort)
注意,本文不是字符串排序,是字符串数组的排序. 方法分别是: 1.低位优先键索引排序 2.高位优先建索引排序 3.Java自带排序(经过调优的归并排序) 4.冒泡排序 5.快速排序 6.三向快速排序 ...
- java 将字符串数组变为字典顺序排序后的字符串数组
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class String ...
- ios 汉字字符串数组拼音排序
ios没有提供简单的汉字拼音排序方法,在网上看到了oc方法,这里写以下对应的swift方法 var stringCompareBlock: (String,String)->Bool = { ( ...
- 在PHP中,将一个汉字数组按照拼音首字母进行排序
(之前发的这篇博文因为含有敏感关键字,只好重发一遍了) <?php $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲 ...
- js中json对象数组按对象属性排序(sort方法)---2(根据拼音排序汉字和排序英文)
本例主要实现 中文汉字按拼音排序的方法和英文按照首字母排序的方法. 要排序的数据: //要排序的数据 let data = [ {chinese: '蔡司', english: 'Chase'}, { ...
- js中实现中文按字母拼音排序
js中实现中文按字母拼音排序 var Pinyin = (function (){ var Pinyin = function (ops){ this.initialize(ops); }, opti ...
- JavaScript内置对象(字符串,数组,日期的处理)
Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首 ...
- php数组的各种排序
转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/11/2207494.html 如果你已经使用了一段时间PHP的话,那么,你应 ...
随机推荐
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- WebRTC入门
什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器.乙和服务器之间建立信道.甲给乙发 ...
- UI设计学习笔记(7-12)
UI学习笔记(7)--扁平化图标 认识扁平化 Flat Design 抛弃传统的渐变.阴影.高光等拟真视觉效果,打造看上去更平的界面.(颜色.形状) 扁平化图标有什么优缺点 优点: 简约不简单.有新鲜 ...
- 持续更新 | 想不到的key
前言 开坑写一些我认为比较巧妙的东西想不到的东西 正文 判断回文串的时候 考虑一下枚举中心位往两边扩展 最大子矩阵与单调栈 遇难则反系列 算合法可以转换成算不合法.同理,不合法转换成合法计算有时也会简 ...
- java 实验1
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:杨光 学号:20135233 成绩: 指导教师:娄嘉鹏 实验 ...
- Task 6.4 冲刺Two之站立会议4
今天对主界面部分的代码进行了完善,因为主界面有对于用户账号的设置.包括头像修改.增删好友.进入聊天界面等功能,包含的内容很多.我主要是负责跟聊天界面的连接以及账号设置的部分:遇到的问题有,因为这部分依 ...
- 超实用 2 ArrayList链表之 员工工资管理系统
package ArrayList的小程序; import java.io.*; import java.util.*; public class kkk { /** * 作者:Mr.fan * 功能 ...
- 【搜索】POJ-2718 贪心+枚举
一.题目 Description Given a number of distinct decimal digits, you can form one integer by choosing a n ...
- Software Defined Networking(Week 2, part 3)
Control of Packet-switch Network 我们已经讨论过中心控制网络的原理,但主要是以电话网络做模型的.现在我们来看看对于分组交换网络的控制是如何改进的. Why Separa ...
- 网桥 以及 IEEE802.1D 生成树协议
(一)网桥 网桥是一个layer 2设备,能够连接两个不同的网段. 如图