PHP数组的排序函数

对保存在数组中的相关数据进行排序是一件非常有意义的事情。在PHP中提供了很多函数可以对数组进行排序,这些函数提供了多种排序的方法。例如,可以通过元素的值或键及自定义排序等。

①简单的数组排序函数
简单的数组排序,是对一个数组元素的值进行排序,PHP的sort()函数和rsort()函数实现了这个功能。这两个函数既可以按数字大小排列也可以按照字母顺序排列,并具有相同的参数列表。其函数原型分别如下:
bool sort(array &array[,int sort_flags])
bool rsort(array &array[,int sort_flags])
第一个参数是必须的。后一个参数是可选的,给出了排序的方式,可以用以下值改变排序的行为。
SORT_REGULAR:是默认值,将自动识别数组元素的类型进行排序。
SORT_NUMERIC:用于数字元素的排序。
SORT_STRING:用于字符串元素的排序。
SORT_LOCALE_STRING:根据当前的locale设置来把元素当做字符串比较。

sort()函数对数组中的元素值按照由小到大顺序进行排序,rsort()函数则按照由大到小的顺序对元素的值进行排序。这两个函数使用的代码如下所示:


1

2

3

4

5

6

7

8

9

<?php

$data = array(5,8,1,7,2);

sort($data);

print_r($data); //输出:Array([0]=>1 [1]=>2 [2]=>5 [3]=>7 [4]=>8)

rsort($data);

print_r($data); //输出:Array([0]=>8 [1]=>7 [2]=>5 [3]=>2 [4]=>1)

?>

②根据键名对数组排序
当我们使用数组时,经常会根据键名对数组重新排序,ksort()函数和krsort()函数实现了这个功能。ksort函数对数组按照键名进行由小到大的排序,krsort()函数和ksort()函数相反,排序后为数组值保留原来的键。

③根据元素的值对数组排序
如果你想使用数组中元素的值进行排序来取代键值排序,PHP也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了,如果按照从大到小排序,可以使用arsort()函数。前面介绍过简单的排序函数sort()函数和rsort()函数,也是根据元素的值对数组进行排序,单原始键名将被忽略,而依序使用数字重新索引数组的下标。而asort()函数和arsort()函数将保留原有键名和值得关系。

④根据“自然排序”法对数组排序
PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则,这种特性成为“自然排序法”,即数字从1到9的排序方法,字母从a到z的排序方法,短者优先。当创建模糊逻辑应用软件时这种排序方式非常有用。可以使用natsort()进行“自然排序”法的数组排序,该函数的排序结果时忽略键名的。函数natcasesort()是用“自然排序”算法对数组进行不区分大小写字母的排序。这两个函数使用的代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<?php

$data = array("file1.txt","file11.txt","File2.txt","FILE12.txt","file.txt");

natsort($data); //普通的自然排序

print_r($data); //输出排序后的结果,数组中包括大小写,输出不是正确的排序结果

/*运行结果:

Array(

[3]=>FILE12.txt //大写的元素排在了前面

[2]=>File2.txt

[4]=>file.txt

[0]=>file1.txt

[1]=>file11.txt

)

*/

natcasesort($data); //忽略大小写的“自然排序”

print_r($data); //输出“自然排序”后的结果,正常结果

/*运行结果

Array( //使用natcasesort()函数忽略大小写的“自然排序”后的结果

[4]=>file.txt

[0]=>file1.txt

[2]=>File2.txt

[1]=>file11.txt

[3]=>FILE12.txt

)

*/

?>

⑤根据用户自定的规则对数组排序
PHP提供了可以通过创建你自己的比较函数作为回调函数的数组排序函数,包括usort()、uasort()和uksort等函数。他们的使用格式一样,并具有相同的参数列表,区别在于对键还是值进行排序。其函数原型分别如下:
bool usort(array &array,callback cmp_function)
bool uasort(array &array,callback cmp_function)
bool ursort(array &array,callback cmp_function)

这三个函数将用用户自定义的比较函数对一个数组中的值进行排序。入股偶要排序的数组需要用一种不寻常的标准进行排序,那么应该使用这几个函数。在自定义的回调函数中,需要两个参数,分别依次传入数组中连续的两个元素。比较函数必须在第一个参数被认为小于、等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。在下面的例子中就根据数组中元素的长度对数组进行排序,最短项放在最前面。代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

//声明一个数组,其中元素值得长度不相同

$lamp = array("Linux","Apache","MySQL","php");

//使用usort()函数传入用户自定义的回调函数进行数组排序

usort($lamp,"sortByLen");

print_r($lamp);

//自定义的函数作为回调函数提供给usort()函数使用,声明排序规则

function sortByLen($one,$two){

//如果两个参数长度相等返回0,在数组中的位置不变

if(strlen($one) == strlen($two))

return 0;

else

//第一个参数大于第二个参数返回大于0的数,否则返回小于0的数

return (strlen($one)>strlen($two)) ? 1 : -1;

}

//运行结果 Array([0]=>php [1]=MySQL [2]=>Linux [3]=>Apache)

?>

上例的代码中,创建了自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1、0或-1,这个返回值是决定元素排列的基础。

⑥多维数组的排序

PHP也允许在多维数组上执行一些比较复杂的排序。例如,首先对一个嵌套数组使用一个普通的键值进行排序,然后再根据另一个键值进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。可以使用array_multisort()函数对多个数组或多维数组进行排序,后者根据某一维或多维对多维数组进行排序。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?php

//声明一个$data数组,模拟了一个行和列数组

$data = array(

array("id"=>1,"soft"=>"Linux","rating"=>3),

array("id"=>2,"soft"=>"Apache","rating"=>1),

array("id"=>3,"soft"=>"MySQL","rating"=>4),

array("id"=>4,"soft"=>"PHP","rating"=>2),

);

//foreach遍历创建两个数组$soft和rating,作为array_multisort的参数

foreach($data as $key =>$value){

$soft[$key] = $value ["soft"]; //将$data中的每个数组元素中键值为soft的值形成数组$soft

$rating[$key] = $value["rating"]; //将每个数组元素中键值为rating的值形成数组$rating

}

array_multisort($rating,$soft,$data); //使用array_multisort()函数传入三个数组进行排序

print_r($data); //输出排序后的二维数组

/*运行结果

array(

[0]=>Array([id]=>2 [soft]=>Apache [rating]=>1)

[1]=>Array([id]=>4 [soft]=>PHP [rating]=>2)

[2]=>Array([id]=>1 [soft]=>Linux [rating]=>3)

[3]=>Array([id]=>3 [soft]=>MySQL [rating]=>4)

)

*/

?>

上面的程序中在$data数组中模拟了一个行和列数组。然后使用array_multisort()函数对数据集合进行重新排序,首先根据$rating数组中的键值进行排序,然后,如果$rating中的元素值相等,再根据$soft数组进行排序。

array_multisort()函数是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,正如你在例子中看到的,它能对多个不相关的数组进行排序,也可以使用其中一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

>> 本文固定链接: http://php.ncong.com/php_course/arry_function/array_paixu.html

>> 转载请注明: 恩聪php 2014年04月13日 于 恩聪PHP学习教程 发表

PHP数组的排序函数

时间: 2024-10-10 20:15:01

PHP数组的排序函数的相关文章

数组的排序函数

PHP - 数组的排序函数 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键,以升序对关联数组进行排序 arsort() - 根据值,以降序对关联数组进行排序 krsort() - 根据键,以降序对关联数组进行排序 举一个例子: 根据键对关联数组进行降序排序: <?php $age=array("Bill"=>"35","Steve&quo

PHP基础-常用的数组相关处理函数

一 数组键/值操作有关的函数 1. array_values()//获取数组中所有的值 $lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySqL", "laguage"=>"php"); $arr=array_values($lamp); list($os,

&lt;笔试&gt;&lt;面试&gt;编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。

思路:仿照qsort函数运用函数指针实现排序整形数组.排序字符串的功能. 首先,编写整形数组比较函数和字符串比较函数:其次,仿照qsort函数将首元素地址.元素个数.元素大小.比较函数 传参编写熟悉的冒泡排序函数:最后,举例验证函数正确性. /******************************/ //1.编写冒泡排序,可以排序整形数组,也可以排序字符串. #include<stdio.h> #include<stdlib.h> #include<assert.h&g

【二】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否函数该整数。 ```java public class Test { /** 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否函数该整数. public class Test { /** 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否函数该整数. */ public static void main(String[] args) { int[][] arr =

3203 数组做函数参数----排序函数--C语言版

3203: 数组做函数参数----排序函数--C语言版 时间限制: 1 Sec  内存限制: 128 MB提交: 253  解决: 151[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ]);//该函数完成对array数组的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h> void sort

3204: 数组做函数参数--排序函数2--C语言

3204: 数组做函数参数--排序函数2--C语言 时间限制: 1 Sec  内存限制: 128 MB提交: 211  解决: 143[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ],int n);//该函数完成对array数组的前n个元素的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h >

js中的数组对象排序

一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"

对数组进行排序

PHP 有一些用来排序数组的函数, 这个文档会把它们列出来. 主要区别有: 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array['key'] = 'value';. 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...). 排序的顺序有:字母表顺序, 由低到高(升序), 由高到低(降序),数字排序,自然排序,随机顺序或者用户自定义排序. 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组

php多维数组自定义排序 uasort()

php内置的排序函数很多:正反各种排: 常用的排序函数: sort() - 以升序对数组排序rsort() - 以降序对数组排序asort() - 根据值,以升序对关联数组进行排序ksort() - 根据键,以升序对关联数组进行排序arsort() - 根据值,以降序对关联数组进行排序krsort() - 根据键,以降序对关联数组进行排序 基本都能满足需求了:关于这些函数的使用方法就不多啰嗦了: 但是在项目的实际开发中还是会有些更加苛刻的排序需求:今天要介绍的排序函数是: uasort() ua