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的话,那么,你应 ...
随机推荐
- netbeans 类重复 解决
Help -> About -> Cache directory 记录Cache directory目录 删除该目录下的所有文件 重启
- Linux速成(二)
四.Linux 系统目录结构 树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot:这里存放的是启动Linux时使用的一些核心 ...
- 使用C#采集Shibor数据到Excel
对Shibor的变化一直以来比较关注,正好最近学习了对html数据处理的一些知识,就打算拿来采集一些我需要的Shibor数据. 使用到的库 HttpAgilityPack 一个非常不错的html解析工 ...
- java之接口开发-初级篇
简述:转眼之间已经开发java有五年之余了,从以前的刚刚接触电脑,到现在的公司上班,真是转眼之间呀!前两年开发过前端,后台和Android,Android火的那几年,差点转去做Android,哈哈!后 ...
- python数据分析画图体验
对于numpy的函数,pands等,不是很熟,我来copy一下code,敲击一下,找找感觉. 默认的导入包import numpy as npimport matplotlib.pyplot as p ...
- [linux] 利用PROMPT_COMMAND实现命令审计
网上查了实现命令审计大概有以下几种: 查不到了,改天再补充 以下环境基于CentOS 6 1.修改history时间格式 echo 'HISTTIMEFORMAT="%F %T " ...
- 以符合人类阅读的方式打印php数组【转载】
在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的: 先定义一个数组: 1 2 3 4 5 6 7 8 9 $array=array( 't0'=&g ...
- Scrum立会报告+燃尽图(十月十一日总第二次):需求分析
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2191 Scrum立会master:张俊余 一.小组介绍 组长:付佳 组员 ...
- Java实验五(客户端)
一. 实验内容 1. 运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2. 利用加解密代码包,编译运行代码,客户端加密,服务器解密: 3. 客户端加密明文后将密文通过 ...
- SQL语句联表查询
Natural join:字段名和数据类型相同字段进行等值连接: inner join:与join相同,把符合条件的元组选出来,创建视图时用的即是inner join: left join:左表全选出 ...