码迷,mamicode.com
首页 > 编程语言 > 详细

PHP 数组排序相关函数总结

时间:2017-04-16 17:48:27      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:lag   ini   算法   blank   区分大小写   frog   位运算   而不是   字母   

数组排序函数包括:

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 数组排序相关函数总结

标签:lag   ini   算法   blank   区分大小写   frog   位运算   而不是   字母   

原文地址:http://www.cnblogs.com/jade640/p/6719294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!