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的话,那么,你应 ...
随机推荐
- ABORT: Can't find command 'my_print_defaults'.
解决办法是输入如下命令: export PATH=/usr/local/mysql/bin:$PATH 将/usr/local/mysql/bin加到$PATH环境变量里
- 【SIKIA计划】_06_Unity2D游戏开发-拾荒者笔记
[新增分类]Animations 动画——Animation——AnimatorControllerPrefabs 预制 [素材导入]unitypackage 素材包Sprites Editor 编辑 ...
- jmeter控制器(一)
简单控制器: 也就是最简单的控制器,里面没有任何内容的,如下图所示: 当我设置线程为循环10次时,运行简单控制器及下边的注册,设置如下图: 通过查看结果数得知,注册只成功了一次 ,再注册时出现邮箱已存 ...
- 多tomcat 同一个浏览器 多个项目 会导致session覆盖
1,多tomcat 同一个浏览器 同一个项目 会导致session覆盖 个人猜测:一个服务器中有多个Tomcat服务器多个项目,每个服务器占用不同的端口号,当在同一个浏览器里面同时打开2个系统时,一个 ...
- import 导入包的特别用法总结
指定别名 可以为包指定一个别名,以便记忆或提高输入效率 如 import str "strings" 在使用的时候可以直接使用别名,如原先要写成strings.Contains,现 ...
- 第十三次作业psp
psp 进度条 代码累积折线图 博文累积折线图 psp饼状图
- 【探路者】Postmortem会议(“事后诸葛亮”会议)
[探路者]Postmortem会议(“事后诸葛亮”会议) 整理:米赫 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的贪吃蛇游戏主要将完成一个 ...
- 【欢迎来怼】 Beta发布事后诸葛亮会议
队名:欢迎来怼 项目名称:博客园Android端APP 小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 ————————————————————————————————————— ...
- 团队冲刺--Seven
昨天: 司宇航:测试功能版块,优化功能版块. 马佳慧:优化界面 . 王金萱:合并程序. 季方: 合并程序. 今天: 司宇航:优化功能版块. 马佳慧:优化界面 . 王金萱:优化界面. 季方: 完善功 ...
- Sprint会议2
昨天:准备查找安卓APP开发的有关资料,安装有关软件 今天:自己制作一个安卓小程序,熟悉一下操作 遇到问题:安装遇到问题,环境配置出现问题