PHP数组排序方法大全(附带实例)
【实例 1】对指定的数组元素进行排序,并输出排序前后的数组。
<?php header("content-type:text/html;charset=utf-8"); $data = Array(5,8,1,7,2); echo "排序前数组:</br>"; print_r($data); echo "</br>"; sort($data); echo "排序后数组:</br>"; print_r($data); ?>运行结果为:
排序前数组:Array
(
[0] => 5
[1] => 8
[2] => 1
[3] => 7
[4] => 2
)
排序后数组:Array
(
[0] => 1
[1] => 2
[2] => 5
[3] => 7
[4] => 8
)
我们也能使用 rsort() 函数对数组元素进行排序,它的结果与前面所使用的 sort() 简单排序结果相反。rsort() 函数对数组元素进行从高到低的排序,同样可以按数字大小排列,也可以按字母顺序排列。
【实例 2】对指定数组元素按从高到低的顺序进行排列。
<?php header("content-type:text/html;charset=utf-8"); $data = Array(5,8,1,7,2); echo "排序前数组:</br>"; print_r($data); echo "</br>"; rsort($data); echo "排序后数组:</br>"; print_r($data); ?>运行结果为:
排序前数组:Array
(
[0] => 5
[1] => 8
[2] => 1
[3] => 7
[4] => 2
)
排序后数组:Array
(
[0] => 8
[1] => 7
[2] => 5
[3] => 2
[4] => 1
)
PHP根据键名排序
使用数组时经常需要根据键名对数组按从大到小进行排序。ksort() 函数可以根据键名对数组进行排序(倒排),同时,它在排序的过程中会保持键名的相关性。【实例 3】使用 ksort() 函数对数组进行排序。
<?php $data = Array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain"); ksort($data); print_r($data); ?>运行结果为:
Array
(
[DE] => Germany
[ES] => Spain
[IN] => India
[US] => United States
)
PHP根据值排序
如果读者想使用值排序来取代键名排序,那么使用 asort() 函数来代替 ksort() 函数即可。【实例 4】值排序。
<?php $data = Array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain"); asort($data); print_r($data); ?>运行结果为:
Array
(
[DE] => Germany
[IN] => India
[ES] => Spain
[US] => United States
)
排序函数的对比如下表所示:
函数 | 特点 |
---|---|
sort() | 按键值从小到大排序,键名和键值不具有相关性 |
rsort() | 按键值从大到小排序,键名和键值不具有相关性 |
asort() | 按键值从小到大排序,键名和键值保持相关性 |
ksort() | 按键名从小到大排序,键名和键值保持相关性 |
PHP自然语言排序
PHP 有一种非常独特的排序方式,这种方式利用认知而不是利用计算规则进行排序,这种方式被称为自然语言排序。当创建模糊逻辑应用软件的时候,这种排序方式非常有用。【实例 5】自然语言排序。
<?php $data = Array("book-1", "book-10", "book-100", "book-5"); sort($data); print_r($data); echo "<br>"; 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() 函数即可。
【实例 6】对数组进行倒排。
<?php $data = Array("book-1", "book-10", "book-100", "book-5"); natsort($data); print_r($data); echo "<br>"; $data1=Array_reverse($data); print_r($data1); ?>运行结果为:
Array
(
[0] => book-1
[3] => book-5
[1] => book-10
[2] => book-100
)
Array
(
[0] => book-100
[1] => book-10
[2] => book-5
[3] => book-1
)
PHP根据用户自定义的规则进行数组排序
在 PHP 中,用户也可以定义自己的排序算法,通过创建自定义比较函数,并把它传递给 usort() 函数。如果第一个参数比第二个参数“小”,比较函数必须返回一个比 0 小的数值;如果第一参数比第二个参数“大”,比较函数应该返回一个比 0 大的数值。下述实例根据它们的长度对数组元素进行排序,将最短项放在最前面。
【实例 7】根据用户自定义的规则进行数组排序。
<?php $data = Array("joe@h**t.com", "john.doe@g*.c*.u*", "asmithsonian@u*.info", "jack@xxx.yy"); usort($data, 'sortByLen'); print_r($data); function sortByLen($a, $b) { if (strlen($a) == strlen($b)) return 0; else return (strlen($a) > strlen($b)) ? 1 : -1; } ?>运行结果为:
Array
(
[0] => jack@xxx.yy
[1] => joe@h**t.com
[2] => john.doe@g*.c*.u*
[3] => asmithsonian@u*.info
)