zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/5116416.html
Copyright © 2011-2022 走看看