如何对 PHP 数组进行排序,其值为字符串,由"-"分割



我有以下数组:

array (
0 => '4-0',
1 => '4-1',
2 => '4-2',
3 => '4-3',
4 => '4-4',
5 => '4-5',
6 => '4-6',
7 => '4-7',
8 => '4-8',
9 => '4-9',
10 => '4-10',
11 => '4-11',
12 => '4-12',
13 => '4-13',
14 => '4-14',
15 => '4-15',
16 => '4-16',
17 => '8-0',
18 => '9-0',
19 => '2-0',
20 => '5-0',
21 => '7-1',
)

我想要的是按value订购ASC。所以数组 [19] 的值应该是第一个,数组 [18] 的值应该是最后一个。我已经尝试了一些排序功能,例如asort()但它并没有做我真正想要的。

asort()

array (
0 => '2-0',
1 => '4-0',
2 => '4-1',
3 => '4-10',
4 => '4-11',
5 => '4-12',
6 => '4-13',
7 => '4-14',
8 => '4-15',
9 => '4-16',
10 => '4-2',
11 => '4-3',
12 => '4-4',
13 => '4-5',
14 => '4-6',
15 => '4-7',
16 => '4-8',
17 => '4-9',
18 => '5-0',
19 => '7-1',
20 => '8-0',
21 => '9-0',
)

是否有特定的PHP函数,或者我应该实现自己的算法?有什么想法吗?

您可以将sort()SORT_NATURAL标志一起使用:

<?php
$array = array (
0 => '4-0',
1 => '4-1',
2 => '4-2',
3 => '4-3',
4 => '4-4',
5 => '4-5',
6 => '4-6',
7 => '4-7',
8 => '4-8',
9 => '4-9',
10 => '4-10',
11 => '4-11',
12 => '4-12',
13 => '4-13',
14 => '4-14',
15 => '4-15',
16 => '4-16',
17 => '8-0',
18 => '9-0',
19 => '2-0',
20 => '5-0',
21 => '7-1',
);
sort( $array, SORT_NATURAL );
print_r( $array );

输出:

Array
(
[0] => 2-0
[1] => 4-0
[2] => 4-1
[3] => 4-2
[4] => 4-3
[5] => 4-4
[6] => 4-5
[7] => 4-6
[8] => 4-7
[9] => 4-8
[10] => 4-9
[11] => 4-10
[12] => 4-11
[13] => 4-12
[14] => 4-13
[15] => 4-14
[16] => 4-15
[17] => 4-16
[18] => 5-0
[19] => 7-1
[20] => 8-0
[21] => 9-0
)

您可以使用natsorthttp://php.net/manual/en/function.natsort.php。 它将数组内容排序为字符串。

natsort($your_array)

它简单,只需排序功能即可完成这项工作。

sort($array);

请注意,参数是通过引用传递的,而不是按值传递的。

<?php
$array=array (
0 => '4-0',
1 => '4-1',
2 => '4-2',
....
....
);
sort($array);
print_r($array);
?>

会给出相同的答案

最新更新