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'];

 

 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     }
View Code

请求接口返回的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 }
View Code

 

posted @ 2016-01-09 14:46  流火行者  阅读(1171)  评论(0编辑  收藏  举报