首页 > 编程笔记 > PHP笔记 阅读:2

PHP数组排序方法大全(附带实例)

我们先看看最简单的情况:按从低到高的顺序对数组元素进行简单排序,这个函数既可以根据数字大小对数组元素进行排列,也可以按字母顺序对数组元素进行排列。sort() 函数可以实现这个功能。

【实例 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
)

根据值也可以对数组元素进行倒排序,使用的是 asort() 函数。

排序函数的对比如下表所示:

表:排序函数的对比特点
函数 特点
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() 函数的排序结果更直观,更人性化;sort() 函数则更符合算法规则,更具计算机特点。

自然语言排序能对数组元素进行倒排序吗?答案是肯定的!对 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
)

相关文章