拼音排序的规则:
字符串包括特殊字符、数字、英文字符、中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符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 "<br/>"; 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_utf8 276 345 aaa hello php shangxian 宝马 大家 电脑 工作 还是 加班 中国
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 jimmy 70 * 2016/1/8 71 * @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 }