PHP 数组排序相关函数总结

数组排序函数包括:

sort()、rsort()、asort()、arsort()、ksort()、krsort()、natsort()、natcasesort()、shuffle()、array_multisort()、usort()、uasort()、uksort()

在区分这些数组排序函数之前,要明确一下几个排序相关的知识点:

  1. 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array[‘key‘] = ‘value‘;
  2. 数组经过上述函数进行排序,数组在排序前键与值得关联关系在一些排序函数处理后依然能够保持,而在另一些函数处理后不能保持。
  3. 可供选择的排序规则有:
    1. SORT_REGULAR - 正常比较单元(不改变类型)       即字符串按照字符串规则排序,数字按照数字排序,然后再将两个类型拼接在一起(字符串在前,数字在后)
    2. SORT_NUMERIC - 单元被作为数字来比较
    3. SORT_STRING - 单元被作为字符串来比较
    4. SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
    5. SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。       自然排序:(实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”),具体的实现规则可以参考:natsort6. SORT_FLAG_CASE - 能够与 SORT_STRINGSORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
  4. 所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组
  5. 所有排序函数底层采用的算法为快速排序,因此是不稳定排序。
函数申明 排序依据 数组索引键保持 排序的顺序
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由低到高
bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由高到低
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由低到高
bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由高到低
bool natsort ( array &$array ) value 自然排序,大小写敏感
bool natcasesort ( array &$array ) value 自然排序,大小写不敏感
bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) key key由低到高
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) key key由高到低
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) value 关联(string)键名保持不变,但数字键名会被重新索引 由参数决定
bool shuffle ( array &$array ) value 打乱数组
bool usort ( array &$array , callable $value_compare_func ) value 用户定义
bool uasort ( array &$array , callable $value_compare_func ) value 用户定义
bool uksort ( array &$array , callable $key_compare_func ) key 用户定义

需要补充的重点:

  1. sort()、rsort()、shuffle()、usort()会打破排序前key与value之间的关联
  2. array_multisort(), 除了可以对多个数组进行关联排序,或者对多维数组进行排序。因此要求参与排序的数组size保持一致,或者多维数组每一维元素个数相等。
 1 <?php
 2 $ar1 = array(10, 100, 100, 0);
 3 $ar2 = array(1, 3, 2, 4);
 4 array_multisort($ar1, $ar2);
 5 var_dump($ar1);
 6 var_dump($ar2);
 7 /***********
 8 关联排序,以$ar1 regular 升序排序,$ar2 在与$ar1关联的基础上,对相同$ar1值,不同$ar2值进行排序
 9 array(4) {
10   [0]=> int(0)
11   [1]=> int(10)
12   [2]=> int(100)
13   [3]=> int(100)
14 }
15 array(4) {
16   [0]=> int(4)
17   [1]=> int(1)
18   [2]=> int(2)
19   [3]=> int(3)
20 }
21 **********/
22
23 $ar = array(
24        array("10", 11, 100, 100, "a"),
25        array(   1,  2, "2",   3,   1)
26       );
27 array_multisort($ar[0], SORT_ASC, SORT_STRING,
28                 $ar[1], SORT_NUMERIC, SORT_DESC);
29 var_dump($ar);
30 /*********
31 array(2) {
32   [0]=> array(5) {
33     [0]=> string(2) "10"
34     [1]=> int(100)
35     [2]=> int(100)
36     [3]=> int(11)
37     [4]=> string(1) "a"
38   }
39   [1]=> array(5) {
40     [0]=> int(1)
41     [1]=> int(3)
42     [2]=> string(1) "2"
43     [3]=> int(2)
44     [4]=> int(1)
45   }
46 }
47 *********/
时间: 2024-07-29 23:21:11

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

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

php数据库操作常用相关函数

MySQL访问函数都需要有相应的权限才能运行.常用的相关函数介绍如下: (1)integer mysql_connect(主机,用户名,口令); 此函数开始一个对指定主机上的MySQL数据库的连接.若该数据库位于一个不同地端口,则在主机名后加上冒号和端口号.所有参数均为可选的,缺省情况下分别对应为本地主机.用户正在执行的脚本名和空.主机可以是IP地址或域名. 在脚本执行结束时,连接被自动关闭,也可以用mysql_close提前关闭. (2)boolean mysql_create_db(数据库名

NSSortDescriptor对象进行数组排序

//创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"zhubada", @"honghunag"]; //创建一个排序条件,也就是一个NSSortDescriptor对象 //其中第一个参数为数组中对象要按照什么属性来排序(比如自身.姓名,年龄等) //第二个参数为指定排序方式是升序还是降序 //ascending  排序的意思,默

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [字符串的输入输出] 1.字符串输出: %s-------从给定的地址开始输出字符直到遇到\0停止: printf("%s\n",&a[3]);  printf("%s\n",a); char a[]="hellowo\0rd!"; 2.字符串输入: 从键盘上接收一个字符串,保存在以a为首地址的字符数组中 scanf("%s&

JavaScript - Array对象的使用 及 数组排序 sort

<html> <head> <head> <body> <script language="javascript"> // Array对象 // 第一种构造方法 var arr = new Array(); alert(arr.length); arr[0] = 520 ; arr[1] = "wjp" ; alert(arr.length); // 第二种构造方法 // Array(4) ; // 第三种

ES6用来判断数值的相关函数

最近在学习ES6的基础知识,整理了一下ES6用来判断数值的相关函数 Math.sign() =>判断正负数的函数 Math.trunc() =>取整函数 Number.isInteger() =>判断一个值是否为整数 Number.isNaN() =>用来检查一个值是否为NaN Number.isFinite() =>用来检查一个数值是否为有限的(finite) Math.cbrt() =>用于计算一个数的立方根. =>对于非数值,Math.cbrt方法内部也是先

写个函数用来对二维数组排序

29.写个函数用来对二维数组排序(新浪) Foreach有两种语法: 语法一:foreach($arr as $value){ Echo $value; } 语法一:foreach($arr as $key=>$value){ Echo $key . "=>" . $value; } 使用foreach遍历二维数组 与数组排序有关的函数: ?  sort():对数组元素的值升序排列,不保留索引关系 ?  rsort():对数组元素的值降序排列,不保留索引关系. ?  aso

学习笔记(2)---Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

下面代码没有认真看: <?php //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order = 0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach ($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if ($