PHP 字串陣列按照拼音排序的問題

流火行者發表於2016-01-09

拼音排序的規則:

字串包括特殊字元、數字、英文字元、中文字元等等,排序結果要求,特殊字元排在第一梯隊,將其按照首個字元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

 

相關文章