PHP 数组排序相关函数总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 中新增的。       自然排序:(实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”),具体的实现规则可以参考:natsort
    6. 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 *********/

 

以上是关于PHP 数组排序相关函数总结的主要内容,如果未能解决你的问题,请参考以下文章

几个关于js数组方法reduce的经典片段

几个关于js数组方法reduce的经典片段

php怎么对数组进行排序

用php定义一个数组,要求把数组从大到小排序并输出

数组的相关处理函数及数组的键/值操作函数

php数组函数有哪些操作?php数组函数的应用