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的话,那么,你应 ...
随机推荐
- 洛谷P1585 魔法阵
题目传送门 这题就是一个有技巧的DFS+一大堆乱七八糟的剪枝 进行DFS时注意一下以下点 根据题意,我们可以把DFS分成两块,即1--n*m/2与n*m/2--n*m,第一块边找边记录,第二块就开始计 ...
- Java生成唯一ID
这里我用的是Java提供的java.util.UUID类来产生随机字串,UUID码是什么我就不再赘述,能满足我们的需求就可以. 下面是java代码: import java.util.UUID; pu ...
- 从零开始的Python学习Episode 18——面向对象(1)
类与对象 类即类别.种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 类的定义 class 类名: 属性1 属性2 def 方法(self,ar ...
- Linux下端口映射工具rinetd
Linux下简单好用的工具rinetd,实现端口映射/转发/重定向官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/r ...
- uiimageview 的 animation 动画
NSMutableArray *meiArr = [NSMutableArray arrayWithCapacity:4]; for (int i = 0; i < 4; i++) { NSSt ...
- 图解Raid5数据存储的原理
- Java面向对象程序设计
北京电子科技学院(BESTI) 实 ...
- JAVA实验报告三:敏捷开发与XP实践
实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软件需 ...
- 20172321 2017-2018-2 《Java程序设计》第二周学习总结
20172321 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 第一章要点: 要点1 字符串:print和println用法的区别,字符串的拼接,java中 ...
- 【贪心算法】POJ-3040 局部最优到全局最优
一.题目 Description As a reward for record milk production, Farmer John has decided to start paying Bes ...