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
  • 相关阅读:
    Codeforces Round #636 D. Constant Palindrome Sum(差分/好题)
    Codeforces Round #636 C. Alternating Subsequence
    Codeforces Round #636 B. Balanced Array(水)
    Codeforces Round #636 A. Candies(水)
    洛谷P2136 拉近距离(负环判定)
    P2850 [USACO06DEC]Wormholes G(负环判定)
    架构--缓存知识
    集群-架构
    ELK-第二集
    Linux下的I/O复用与epoll详解
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/5116416.html
Copyright © 2011-2022 走看看