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的话,那么,你应 ...
随机推荐
- CentOS7.2下配置SOCKS5代理
SOCKS介绍: 1.这里只做简单介绍. SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Int ...
- 使用request+Beautiful爬取妹子图
一.request安装 pip install requests request使用示例 import requests response = requests.get('https://www.mz ...
- Unity新版本VR以及SteamVR基础
一.Unity2018新版本VR Unity 简单VRDemo搭建 Unity环境搭建: PlayerSetting设置如下: 启动虚拟现实驱动,sdk选择OpenVR.HTC Vive只支持Ope ...
- 网格系统-bootStrap4常用CSS笔记
.row 定义一行 .col 均分列数,最多一行12列.每列左右间隙各15px .col-{1到12} 定义在所有屏幕下的列宽 .col-{sm|md|lg|xl}-{1到12} 定义在指定屏幕下该列 ...
- MYSQL数据库与Emoji表情的故事
问题背景 手机上众多输入法和键盘支持输入 emoji 表情,给早期设计的程序造成了越来越多的干扰. 移动端购物的流行,2018 年 "双十一"全网移动端交易达到 93.6% 微信年 ...
- JavaWeb-Servlet-Tomcat
Servlet就是运行在服务器上的Java类.Servlet容器为javaweb应用提供运行时环境,负责管理Servlet和JSP的生命周期,以及管理它们的共享数据. Servlet容器软件——Tom ...
- 占位符golang
定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 ...
- Django_WSGIRequest对象
WSGIRequest对象 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.这个参数就是dja ...
- Daily Srum 10.22
今天大家的状态比较好,但是还是有很多问题没有解决.首先就是服务器这方面,部分同学还不怎么会用:其次就是看代码出现了困难,不能完整地阅读:还有就是我们的昨天的任务有点困难,部分同学不能按时按量的完成!于 ...
- Date 类的使用
package com.Date.Math; import java.text.ParseException; import java.text.SimpleDateFormat; import ja ...