Heim >php教程 >php手册 >PHP下对数组进行排序的函数

PHP下对数组进行排序的函数

WBOY
WBOYOriginal
2016-06-06 20:35:00821Durchsuche

如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作

经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用。PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序。在这篇文章中我们将讨论该排序中最重要的几个函数。
简单排序
首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如Listing A所示:
Listing A

复制代码 代码如下:


$data = array(5,8,1,7,2);
sort($data);
print_r($data);
?>


输出结果如下所示:

复制代码 代码如下:


Array ([0] => 1
[1] => 2
[2] => 5
[3] => 7
[4] => 8
)


也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简单排序结果相反。Rsort()函数对数组元素进行从高到低的倒排,同样可以按数字大小排列也可以按字母顺序排列。Listing B给我们展示了它的一个例子:
Listing B

复制代码 代码如下:


?>


它的输出结果如下:

复制代码 代码如下:


Array ([0] => 8
[1] => 7
[2] => 5
[3] => 2
[4] => 1
)


根据关键字排序
当我们使用数组的时候,经常根据关键字对数组重新排序,从高到低。Ksort()函数就是根据关键字进行排序的函数,同时,它在排序的过程中会保持关键字的相关性。Listing C就是一个例子:
Listing C

复制代码 代码如下:


“United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);ksort($data); print_r($data);
?>


它的输出结果如下:

复制代码 代码如下:


Array ([DE] => Germany
[ES] => Spain
[IN] => India
[US] => United States
)


Krsort()函数是根据关键字对数组进行倒排,Listing D就是这样的例子:
Listing D

复制代码 代码如下:


“United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);krsort($data); print_r($data);
?>


它的输出结果如下:

复制代码 代码如下:


Array ([US] => United States
[IN] => India
[ES] => Spain
[DE] => Germany
)


根据值排序
如果你想使用值排序来取代关键字排序的话,PHP也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了。如Listing E所示:
Listing E

复制代码 代码如下:


“United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);asort($data); print_r($data);
?>


下面就是它的输出结果。请注意这个结果与上面使用ksort()函数所得到的结果的不同——在这两种情况中,都是按字母顺序进行排序的,但是它们是根据数组的不同字段进行排序的。
同时,请注意关键字-值之间的联系会始终保持;它只是关键字-值对排序后的一种方式,排序并不会改变它们的对应关系。
Array ([DE] => Germany
[IN] => India
[ES] => Spain
[US] => United States
)
现在,你肯定能猜到这种排序也可以进行倒排,它使用arsort()函数完成这个功能。Listing F就是一个例子:
Listing F

复制代码 代码如下:


“United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);arsort($data); print_r($data);
?>


下面是它的输出结果,根据值按字母表顺序进行倒排。将下面的结果与用krsort()函数进行倒排后生成的结果进行比较,就能很容易明白两者的不同了。

复制代码 代码如下:


Array ([US] => United States
[ES] => Spain
[IN] => India
[DE] => Germany
)


自然语言排序
PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:
Listing G

复制代码 代码如下:


natsort($data); print_r($data);?>


它的输出结果如下:

复制代码 代码如下:


Array ([0] => book-1
[1] => book-10
[2] => book-100
[3] => book-5
)
Array
(
[0] => book-1
[3] => book-5
[1] => book-10
[2] => book-100
)


它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。
自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:
Listing H

复制代码 代码如下:


?>


下面是它的输出结果:

复制代码 代码如下:


Array ([0] => book-100
[1] => book-10
[2] => book-5
[3] => book-1
)


根据用户自定义的规则排序
PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。
Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,香港虚拟主机,最短的项放在最前面:
Listing I

复制代码 代码如下:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn