对2维数组或者多维数组排序是常见的问题,在PHP中我们有个专门的多维数组排序函数,下面简单介绍下:
array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数。
array1 | 必需。规定输入的数组。 |
sorting order | 可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。 |
sorting type | 可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。 |
array2 | 可选。规定输入的数组。 |
array3 | 可选。规定输入的数组。 |
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
- SORT_ASC - 默认,按升序排列。(A-Z)
- SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
- SORT_REGULAR - 默认。将每一项按常规顺序排列。
- SORT_NUMERIC - 将每一项按数字顺序排列。
- SORT_STRING - 将每一项按字母顺序排列
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
|
<?php
function
my_sort(
$arrays
,
$sort_key
,
$sort_order
=SORT_ASC,
$sort_type
=SORT_NUMERIC ){
if
(
is_array
(
$arrays
)){
foreach
(
$arrays
as
$array
){
if
(
is_array
(
$array
)){
$key_arrays
[] =
$array
[
$sort_key
];
}
else
{
return
false;
}
}
}
else
{
return
false;
}
array_multisort
(
$key_arrays
,
$sort_order
,
$sort_type
,
$arrays
);
return
$arrays
;
}
$person
=
array
(
array
(
'id'
=>1,
'name'
=>
'fj'
,
'weight'
=>100,
'height'
=>180),
array
(
'id'
=>2,
'name'
=>
'tom'
,
'weight'
=>53,
'height'
=>150),
array
(
'id'
=>3,
'name'
=>
'jerry'
,
'weight'
=>120,
'height'
=>156),
array
(
'id'
=>4,
'name'
=>
'bill'
,
'weight'
=>110,
'height'
=>190),
array
(
'id'
=>5,
'name'
=>
'linken'
,
'weight'
=>80,
'height'
=>200),
array
(
'id'
=>6,
'name'
=>
'madana'
,
'weight'
=>95,
'height'
=>110),
array
(
'id'
=>7,
'name'
=>
'jordan'
,
'weight'
=>70,
'height'
=>170)
);
var_dump(
$person
);
$person
= my_sort(
$person
,
'name'
,SORT_ASC,SORT_STRING);
var_dump(
$person
);
$person
= my_sort(
$person
,
'weight'
);
var_dump(
$person
);
?>
|
结果如下:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
array
(size=7)
0 =>
array
(size=4)
'id'
=> int 1
'name'
=> string
'fj'
(length=2)
'weight'
=> int 100
'height'
=> int 180
1 =>
array
(size=4)
'id'
=> int 2
'name'
=> string
'tom'
(length=3)
'weight'
=> int 53
'height'
=> int 150
2 =>
array
(size=4)
'id'
=> int 3
'name'
=> string
'jerry'
(length=5)
'weight'
=> int 120
'height'
=> int 156
3 =>
array
(size=4)
'id'
=> int 4
'name'
=> string
'bill'
(length=4)
'weight'
=> int 110
'height'
=> int 190
4 =>
array
(size=4)
'id'
=> int 5
'name'
=> string
'linken'
(length=6)
'weight'
=> int 80
'height'
=> int 200
5 =>
array
(size=4)
'id'
=> int 6
'name'
=> string
'madana'
(length=6)
'weight'
=> int 95
'height'
=> int 110
6 =>
array
(size=4)
'id'
=> int 7
'name'
=> string
'jordan'
(length=6)
'weight'
=> int 70
'height'
=> int 170
array
(size=7)
0 =>
array
(size=4)
'id'
=> int 4
'name'
=> string
'bill'
(length=4)
'weight'
=> int 110
'height'
=> int 190
1 =>
array
(size=4)
'id'
=> int 1
'name'
=> string
'fj'
(length=2)
'weight'
=> int 100
'height'
=> int 180
2 =>
array
(size=4)
'id'
=> int 3
'name'
=> string
'jerry'
(length=5)
'weight'
=> int 120
'height'
=> int 156
3 =>
array
(size=4)
'id'
=> int 7
'name'
=> string
'jordan'
(length=6)
'weight'
=> int 70
'height'
=> int 170
4 =>
array
(size=4)
'id'
=> int 5
'name'
=> string
'linken'
(length=6)
'weight'
=> int 80
'height'
=> int 200
5 =>
array
(size=4)
'id'
=> int 6
'name'
=> string
'madana'
(length=6)
'weight'
=> int 95
'height'
=> int 110
6 =>
array
(size=4)
'id'
=> int 2
'name'
=> string
'tom'
(length=3)
'weight'
=> int 53
'height'
=> int 150
array
(size=7)
0 =>
array
(size=4)
'id'
=> int 2
'name'
=> string
'tom'
(length=3)
'weight'
=> int 53
'height'
=> int 150
1 =>
array
(size=4)
'id'
=> int 7
'name'
=> string
'jordan'
(length=6)
'weight'
=> int 70
'height'
=> int 170
2 =>
array
(size=4)
'id'
=> int 5
'name'
=> string
'linken'
(length=6)
'weight'
=> int 80
'height'
=> int 200
3 =>
array
(size=4)
'id'
=> int 6
'name'
=> string
'madana'
(length=6)
'weight'
=> int 95
'height'
=> int 110
4 =>
array
(size=4)
'id'
=> int 1
'name'
=> string
'fj'
(length=2)
'weight'
=> int 100
'height'
=> int 180
5 =>
array
(size=4)
'id'
=> int 4
'name'
=> string
'bill'
(length=4)
'weight'
=> int 110
'height'
=> int 190
6 =>
array
(size=4)
'id'
=> int 3
'name'
=> string
'jerry'
(length=5)
'weight'
=> int 120
'height'
=> int 156
|
这里的重点就是,先把要排序的key存到一个一维数组中,然后就可以使用array_multisort()这个函数,将数组按照key进行排序了,当然,这里的排序你完全可以不适用array_multisort()这个函数,仅仅通过foreach遍历也能达到这个效果,但是既然php开发者给我们提供了更好的办法,我们就可以省去不必要的麻烦了。