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     }

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

时间: 2024-11-05 23:00:06

PHP 字符串数组按照拼音排序的问题的相关文章

通过函数调用对字符串数组进行各种排序

#include<stdio.h> #include<string.h> #include<stdlib.h> #define LINE 3 #define RANK 100 void charater_string(int n,char*ptr[ ]);//字符串输出 void alphabet_list(int n,char*str[]);//按ASCII字母顺序排序 void string_length(int n,char*ptr[]);//按字符串长度排序 v

java 将字符串数组变为字典顺序排序后的字符串数组

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class StringUtil { public static String[] stringSort(String [] s) { List<String> list = new ArrayList<String>(s.length); for (int i = 0; i < s.length; i

ios 汉字字符串数组拼音排序

ios没有提供简单的汉字拼音排序方法,在网上看到了oc方法,这里写以下对应的swift方法 var stringCompareBlock: (String,String)->Bool = { (str1:String, str2:String) -> Bool in var nsStr1 = str1 as NSString var nsStr2 = str2 as NSString var encode:NSStringEncoding = CFStringConvertEncodingTo

Java编程实现中英混合字符串数组按首字母排序的方法

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: ? 1 2 3 4 5 6 7 String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁"

数组去重及排序/0~10随机数字/字符串中出现最多的字符及次数

数组去重及排序: var arr = [1,5,1,2,6,8,1,81,9,0]; for(var i=0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i] == arr[j]){ arr.splice(j,1); j--; } } } arr.sort(function(a,b){ return a-b; // 从小到大排序 }) alert(arr); // 0,1,2,5,6,8,9,81 arr.sort(fu

写一个函数排序整个字符串数组

创建一个字符串数组,总共5个元素,每个元素最多保存30个字符, 写一个函数排序整个数组 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int i,j; char tmp[30]; char arr[5][30]={"bbbb","aaaa","dddd","wwww","eeee"

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置

/** * 功能:对字符串数组进行排序,将所有的变位词排在相邻的位置. */ 两种方法: 方法一: /** * 思路:套用排序算法,并修改比较器.这里比较器用来指示两个字符串胡伟变位词就是相等的. * @param array */ public static void sort(String[] array){ Arrays.sort(array, new AnagramComparator()); } class AnagramComparator implements Comparator

9.11排序与查找(五)——有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置

/** * 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置. */ /** * 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置. * @param strings * @param str * @return */ public static int search(String[] strings,String str){ if(strings==null||str==null||str=="")