天天看點

PHP二維數組的簡易排序

有時候我們需要對二維數組的某個鍵的值進行排序,這裡就是讨論這個問題。我們可以使用array_multisort()這個函數。array_multisort() 函數對多個數組或多元數組進行排序。

參數中的數組被當成一個表的列并以行來進行排序 - 這類似 SQL 的 ORDER BY 子句的功能。第一個數組是要排序的主要數組。數組中的行(值)比較為相同的話,就會按照下一個輸入數組中相應值的大小進行排序,依此類推。

第一個參數是數組,随後的每一個參數可能是數組,也可能是下面的排序順序标志(排序标志用于更改預設的排列順序)之一:

  • SORT_ASC - 預設,按升序排列。(A-Z)
  • SORT_DESC - 按降序排列。(Z-A)

随後可以指定排序的類型:

  • SORT_REGULAR - 預設。将每一項按正常順序排列。
  • SORT_NUMERIC - 将每一項按數字順序排列。
  • SORT_STRING - 将每一項按字母順序排列。

文法: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:可選。規定輸入的數組。

字元串鍵名将被保留,但是數字鍵将被重新索引,從 0 開始,并以 1 遞增。可以在每個數組後設定排序順序和排序類型。如果沒有設定,每個數組參數會使用預設值。

下面是一個例子:

view source print ?

01

<?php

02

03

$arr

=

''

;

04

05

echo

'二維數組如下:'

.

'<br / >'

;

06

for

(

$i

=0;

$i

<=5;

$i

++)

07

{

08

$arr

[

$i

][

'val'

] = mt_rand(1, 100);

09

$arr

[

$i

][

'num'

] = mt_rand(1, 100);

10

}

11

12

echo

'<pre>'

;

13

print_r(

$arr

);

14

echo

'</pre>'

;

15

16

echo

'從二維數組中抽出鍵為val,單獨成另一個數組:'

.

'<br / >'

;

17

foreach

(

$arr

as

$key

=>

$row

18

{

19

$vals

[

$key

] =

$row

[

'val'

];

20

$nums

[

$key

] =

$row

[

'num'

];

21

}

22

23

echo

'<pre>'

;

24

print_r(

$vals

);

25

echo

'</pre>'

;

26

27

echo

'對其進行排序:'

.

'<br / >'

;

28

array_multisort

(

$vals

, SORT_ASC,

$arr

);

29

30

echo

'<pre>'

;

31

print_r(

$vals

);

32

echo

'</pre>'

;

33

34

?>

運作結果:

view source print ?

01

二維數組如下:

02

Array

03

(

04

[0] => Array

05

(

06

[val] => 46

07

[num] => 49

08

)

09

10

[1] => Array

11

(

12

[val] => 8

13

[num] => 24

14

)

15

16

[2] => Array

17

(

18

[val] => 37

19

[num] => 3

20

)

21

22

[3] => Array

23

(

24

[val] => 32

25

[num] => 35

26

)

27

28

[4] => Array

29

(

30

[val] => 19

31

[num] => 38

32

)

33

34

[5] => Array

35

(

36

[val] => 30

37

[num] => 37

38

)

39

40

)

41

從二維數組中抽出鍵為val,單獨成另一個數組:

42

Array

43

(

44

[0] => 46

45

[1] => 8

46

[2] => 37

47

[3] => 32

48

[4] => 19

49

[5] => 30

50

)

51

對其進行排序:

52

Array

53

(

54

[0] => 8

55

[1] => 19

56

[2] => 30

57

[3] => 32

58

[4] => 37

59

[5] => 46

60

)

我們将得到一個按val升序排序的二維數組。