拼音排序的规则:
字符串包括特殊字符、数字、英文字符、中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符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'];
1 usort($array,'mySortArray'); 2 foreach($array as $k=>$v){ 3 echo $v; 4 echo ""; 5 } 6 function mySortArray($name0,$name1){ 7 $array=[$name0,$name1]; 8 foreach ($array as $key=>$value) 9 {10 $new_array[$key] = iconv('UTF-8', 'GBK', $value);11 }12 asort($new_array);13 $array=[];14 foreach ($new_array as $key=>$value)15 {16 $array[]= iconv('GBK', 'UTF-8', $value);17 }18 if($array[0]===$name1){19 return true;20 }else{21 return false;22 }23 }
排序结果:
##$name1_utf8276345aaahellophpshangxian宝马大家电脑工作还是加班中国
PHP的类中排序:
框架中通常是一个类,下面是在Yii的控制器类中对返回给客户端的数组按照中文排序。
控制器中排序代码如下:
1 public function actionJimmy(){ 2 $arr=[ 3 [ 4 'id'=>0, 5 'name'=>'hello' 6 ], 7 [ 8 'id'=>0, 9 'name'=>'aaa'10 ],11 [12 'id'=>0,13 'name'=>'你好'14 ],15 [16 'id'=>0,17 'name'=>'电脑'18 ],19 [20 'id'=>0,21 'name'=>'法第三方'22 ],23 [24 'id'=>0,25 'name'=>'啊啊'26 ],27 [28 'id'=>0,29 'name'=>'mm'30 ],31 [32 'id'=>0,33 'name'=>'来了'34 ], [35 'id'=>0,36 'name'=>'安抚'37 ],38 [39 'id'=>0,40 'name'=>'偶发'41 ],42 [43 'id'=>0,44 'name'=>'爱妃'45 ],46 [47 'id'=>0,48 'name'=>'群发'49 ],50 [51 'id'=>0,52 'name'=>'字符'53 ],54 [55 'id'=>0,56 'name'=>'首个'57 ],58 [59 'id'=>0,60 'name'=>'记录'61 ],62 ];63 usort($arr,[$this,'mySortArray']);64 65 $this->jsonReturn(0, '排序成功', $arr);66 }67 /**68 * 中文字符排序69 * create by jimmy70 * 2016/1/871 * @param $friendA比较函数的第一个72 * @param $friendB比较函数的第二个73 * @return bool返回排序结果74 */75 public function mySortArray($friendA, $friendB){76 $name0=$friendA['name'];77 $name1=$friendB['name'];78 $array=[$name0,$name1];79 foreach ($array as $key=>$value)80 {81 $new_array[$key] = iconv('UTF-8', 'GBK', $value);82 }83 asort($new_array);84 $array=[];85 foreach ($new_array as $key=>$value)86 {87 $array[]= iconv('GBK', 'UTF-8', $value);88 }89 if($array[0]===$name1){90 return true;91 }else{92 return false;93 }94 }
请求接口返回的json内容为排序后的结果:
1 { 2 "code":0, 3 "msg":"排序成功", 4 "data":[ 5 { 6 "id":0, 7 "name":"aaa" 8 }, 9 {10 "id":0,11 "name":"hello"12 },13 {14 "id":0,15 "name":"mm"16 },17 {18 "id":0,19 "name":"啊啊"20 },21 {22 "id":0,23 "name":"爱妃"24 },25 {26 "id":0,27 "name":"安抚"28 },29 {30 "id":0,31 "name":"电脑"32 },33 {34 "id":0,35 "name":"法第三方"36 },37 {38 "id":0,39 "name":"记录"40 },41 {42 "id":0,43 "name":"来了"44 },45 {46 "id":0,47 "name":"你好"48 },49 {50 "id":0,51 "name":"偶发"52 },53 {54 "id":0,55 "name":"群发"56 },57 {58 "id":0,59 "name":"首个"60 },61 {62 "id":0,63 "name":"字符"64 }65 ]66 }