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
)
ICP备案:
公安联网备案: