<?PHP
/**
* @author Tech
*/
class
Character
{
/**
* 二维数组根据首字母分组排序
* @param array $data 二维数组
* @param string $targetKey 首字母的键名
* @return array 根据首字母关联的二维数组
*/
public
function
groupByInitials(
array
$data
,
$targetKey
=
‘name‘
)
{
$data
=
array_map
(
function
(
$item
)
use
(
$targetKey
) {
return
array_merge
(
$item
,[
]);
},
$data
);
return
$data
;
}
/**
* 按字母排序
* @param array $data
* @return array
*/
{
$sortData
= [];
foreach
(
$data
as
$key
=>
$value
) {
$sortData
[
$value
[
‘initials‘
]][] =
$value
;
}
ksort(
$sortData
);
return
$sortData
;
}
/**
* 获取首字母
* @param string $str 汉字字符串
* @return string 首字母
*/
{
if
(
empty
(
$str
)) {
return
‘‘
;}
$fchar
= ord(
$str
{0});
if
(
$fchar
>= ord(
‘A‘
) &&
$fchar
<= ord(
‘z‘
)) {
}
$s1
= iconv(
‘UTF-8‘
,
‘gb2312‘
,
$str
);
$s2
= iconv(
‘gb2312‘
,
‘UTF-8‘
,
$s1
);
$s
=
$s2
==
$str
?
$s1
:
$str
;
$asc
= ord(
$s
{0}) * 256 + ord(
$s
{1}) - 65536;
if
(
$asc
>= -20319 &&
$asc
<= -20284) {
return
‘A‘
;
}
if
(
$asc
>= -20283 &&
$asc
<= -19776) {
return
‘B‘
;
}
if
(
$asc
>= -19775 &&
$asc
<= -19219) {
return
‘C‘
;
}
if
(
$asc
>= -19218 &&
$asc
<= -18711) {
return
‘D‘
;
}
if
(
$asc
>= -18710 &&
$asc
<= -18527) {
return
‘E‘
;
}
if
(
$asc
>= -18526 &&
$asc
<= -18240) {
return
‘F‘
;
}
if
(
$asc
>= -18239 &&
$asc
<= -17923) {
return
‘G‘
;
}
if
(
$asc
>= -17922 &&
$asc
<= -17418) {
return
‘H‘
;
}
if
(
$asc
>= -17417 &&
$asc
<= -16475) {
return
‘J‘
;
}
if
(
$asc
>= -16474 &&
$asc
<= -16213) {
return
‘K‘
;
}
if
(
$asc
>= -16212 &&
$asc
<= -15641) {
return
‘L‘
;
}
if
(
$asc
>= -15640 &&
$asc
<= -15166) {
return
‘M‘
;
}
if
(
$asc
>= -15165 &&
$asc
<= -14923) {
return
‘N‘
;
}
if
(
$asc
>= -14922 &&
$asc
<= -14915) {
return
‘O‘
;
}
if
(
$asc
>= -14914 &&
$asc
<= -14631) {
return
‘P‘
;
}
if
(
$asc
>= -14630 &&
$asc
<= -14150) {
return
‘Q‘
;
}
if
(
$asc
>= -14149 &&
$asc
<= -14091) {
return
‘R‘
;
}
if
(
$asc
>= -14090 &&
$asc
<= -13319) {
return
‘S‘
;
}
if
(
$asc
>= -13318 &&
$asc
<= -12839) {
return
‘T‘
;
}
if
(
$asc
>= -12838 &&
$asc
<= -12557) {
return
‘W‘
;
}
if
(
$asc
>= -12556 &&
$asc
<= -11848) {
return
‘X‘
;
}
if
(
$asc
>= -11847 &&
$asc
<= -11056) {
return
‘Y‘
;
}
if
(
$asc
>= -11055 &&
$asc
<= -10247) {
return
‘Z‘
;
}
return
null;
}
}
|
项目中直接引入即可,如果需要命名空间,可以自行添加,下面是我们看看怎么用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// 按首字母排序
$data
= [
[
‘id‘
=> 1,
‘area_name‘
=>
‘山东‘
],
[
‘id‘
=> 2,
‘area_name‘
=>
‘江苏‘
],
[
‘id‘
=> 3,
‘area_name‘
=>
‘安徽‘
],
[
‘id‘
=> 4,
‘area_name‘
=>
‘福建‘
],
[
‘id‘
=> 5,
‘area_name‘
=>
‘江西‘
],
[
‘id‘
=> 6,
‘area_name‘
=>
‘广东‘
],
[
‘id‘
=> 7,
‘area_name‘
=>
‘广西‘
],
[
‘id‘
=> 8,
‘area_name‘
=>
‘海南‘
],
[
‘id‘
=> 9,
‘area_name‘
=>
‘河南‘
],
[
‘id‘
=> 10,
‘area_name‘
=>
‘湖南‘
],
[
‘id‘
=> 11,
‘area_name‘
=>
‘湖北‘
],
];
|
下面的结果是不是你想要的呢,不论是做app还是网页,都可以用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
$data
=
array
(
‘A‘
=>
array
(
0 =>
array
(
‘id‘
=> 3,
‘area_name‘
=>
‘安徽‘
,
‘initials‘
=>
‘A‘
)
),
‘F‘
=>
array
(
0 =>
array
(
‘id‘
=> 4,
‘area_name‘
=>
‘福建‘
,
‘initials‘
=>
‘F‘
)
),
‘G‘
=>
array
(
0 =>
array
(
‘id‘
=> 6,
‘area_name‘
=>
‘广东‘
,
‘initials‘
=>
‘G‘
),
1 =>
array
(
‘id‘
=> 7,
‘area_name‘
=>
‘广西‘
,
‘initials‘
=>
‘G‘
)
),
‘H‘
=>
array
(
0 =>
array
(
‘id‘
=> 8,
‘area_name‘
=>
‘海南‘
,
‘initials‘
=>
‘H‘
),
1 =>
array
(
‘id‘
=> 9,
‘area_name‘
=>
‘河南‘
,
‘initials‘
=>
‘H‘
),
2 =>
array
(
‘id‘
=> 10,
‘area_name‘
=>
‘湖南‘
,
‘initials‘
=>
‘H‘
),
3 =>
array
(
‘id‘
=> 11,
‘area_name‘
=>
‘湖北‘
,
‘initials‘
=>
‘H‘
)
),
‘J‘
=>
array
(
0 =>
array
(
‘id‘
=> 2,
‘area_name‘
=>
‘江苏‘
,
‘initials‘
=>
‘J‘
),
1 =>
array
(
‘id‘
=> 5,
‘area_name‘
=>
‘江西‘
,
‘initials‘
=>
‘J‘
)
),
‘S‘
=>
array
(
0 =>
array
(
‘id‘
=> 1,
‘area_name‘
=>
‘山东‘
,
‘initials‘
=>
‘S‘
)
)
);
|
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。