PHP数组的排序函数 sort() asort() ksort()

zxh5566  2016-07-26 06:00   Hits: 

对保存在数组中的相关数据进行排序是一件非常有意义的事情,在PHP中提供了很多函数可以对数组进行排序,这些函数提供

了多种排序的方法。例如,可以通过元素的值或键及自定义排序等。

1、简单的数组排序函数
简单的数组排序,是对一个数组元素的值进行排序,PHP的sort()和rsort()函数实现了这个功能,这两个函数可以按数字大

小排列也可以按字母顺序排列,并具有相同的参数列表,第一个参数是必须的,指定需要排序的数组,后一个参数是可选的

,给出了排序的方式,可以用以下值改变排序行为:

SORT_REGULAR 默认自动识别数组元素的类型进行排序
SORT_NUMERIC 用于数字元素的排序
SORT_STRING  用于字符串元素的排序
SORT_LOCAL_STRING 根据当前的locale设置来把元素当做字符串比较

sort()函数对数组中的元素值按照由小到大顺序进行排序,rsort()函数则按照由大到小的顺序对元素的值进行排序,这两个

函数使用的代码如下

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

2、根据键名对数组排序

当我们使用数组的时候,经常会根据键名对数组重新排序,ksort()和krsort()函数实现了这个功能,ksort()函数按照键名

对数组进行由小到大的排序,krsort()函数和ksort()相反,排序后为数组值保留原来的键,使用的格式与sort() rsort()相

同,这两个函数使用的代码如下所示
<?php
$data = array(5=>'five',8=>'eight',1=>'one',7=>'seven',2=>'two');
ksort($data);
print_r($data);
?>

3、根据元素的值对数组排序
如果你想使用数组中的元素的值进行排序来代替键值的排序,PHP也能满足你的要求,只用使用asort()函数来代替先前提到

的ksort()就可以了,如果按值从大到小排序可以使用arsort()函数,前面介绍的简单排序函数sort() rsort()也是根据元素

的值对数组进行排序,但原始键名将被忽略,而从新使用数字索引的下标,而asort() arsort()函数将保留原有键名和值的

关系,这两个函数使用代码如下:
<?php
$data = array('1'=>'linux','a'=>'apache','m'=>'mysql','p'=>'php');
asort($data);
?>

4、根据自然排序法对数组排序

PHP 有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则,这种特性称为自然排序法,即数字从1到9的排序

方式,字母从a到z的方式,当创建模糊逻辑应用软件的时候这种排序方式非常有用,可以使用natsort()进行自然排序法的数

组排序,该函数的排序结果是忽略键名的,函数natcasesort()是用自然排序算法对数组进行不区分大小写字母的排序

<?php
$data = array('file1.txt','file11.txt','File2.txt','FILE12.txt','file.txt');
natcasesort($data); //忽略大小写的自然排序
print_r($data);
//输出
Array(
[4]=>file.txt
[0]=>file1.txt
[2]=>File2.txt
[1]=>file11.txt
[3]=>FILE12.txt
)
?>

5、根据用户自定义的规则对数组排序

PHP也能让你定义自己的排序算法,以进行更复杂的排序操作,提供了可以通过创建你自己的比较函数作为回调函数的数组排

序函数,包括usort() uasort() uksort()等函数,它们的使用格式一样,并具有相同的参数列表,区别在于对键还是值进行

排序,这三个函数将用用户自定义的比较函数对一个数组中的值进行排序,如果要排序的数组需要用一种不寻常的标准进行

排序,那么应该使用这几个函数,在自定义的回调函数中,需要两个参数,分别依次出入数组中连续的两个元素,比较函数

必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于0的整数
<?php
$lamp = array('linux','apache','mysql','php');
usort($lamp,'sortByLen');
print_r($lamp);
function sortByLen($one,$two){
if(strlen($one)==strlen($two)){

return 0;
}else{
return (strlen($one)>strlen($two)) ?1 :-1;
}
}
上面代码中,创建了自己的比较函数,这个函数使用strlen()函数比较每个字符的个数,然后分别返回1 0 -1,这个返回值

是决定元素排列的基础

6、多维数组的排序

PHP也允许在多维数组上执行一些比较复杂的排序,例如,首先对一个嵌套数组使用一个普通的键值进行排序,然后再根据另

一个键值进行排序,这与使用SQL的ORDER BY语句对多个字段进行排序非常相似,可以使用array_multisort()函数对多个数

组或多维数组进行排序,或者根据某一维或多维对多维数组进行排序,该函数如果成功返回true,失败返回false,第一个参

数是要排序的主要数组,数组中的值比较为相同的话,就按照下一个输入数组中相应值的大小来排序,以此类推

<?php
$data = array(
array('id'=>1,'sort'=>'linux','rating'=>3),
array('id'=>2,'sort'=>'apache','rating'=>1),
array('id'=>3,'sort'=>'mysql','rating'=>4),
array('id'=>4,'sort'=>'php','rating'=>2)
);

foreach($data as $k=>$v){
$soft[$k] = $v['sort'];
$rating[$k] = $v['rating'];
}

array_multisort($rating,$soft,$data);
print_r($data);
?>

上面的程序中的$data数组中模拟了一个行和列数组,然后使用array_mutisort()函数对数据集合运行重新排序,首先是根据

$rating 数组中的值进行排序,然后,如果$rating中的元素值相等的话,再根据$soft数组进行排序,array_mutisort()是

PHP中最有用的函数之一,它有非常广泛的应用范围,另外,正如你在例子中所看到的,它能对多个不相关的数组进行排序,

也可以使用其中一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

上一篇:PHP使用回调函数处理数组array_filter,array_walk,arra
下一篇:PHP拆分合并分解结合数组array_slice()、array_splice