首页 > 代码库 > PHP 数组排序相关函数总结

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 ] )keykey由低到高
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )keykey由高到低
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 数组排序相关函数总结