zoukankan      html  css  js  c++  java
  • 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 *********/
  • 相关阅读:
    LIBSVM
    tf-idf
    DIV+CSS例子
    网页背景设置
    获取JDBC中的ResultSet的记录的条数
    SQL 基本语句
    经典SQL语句大全
    JS(截取字符串,显示当前系统时间yyyy-MM-dd,从文本框得到的数值计算)
    JavaScript实现全排列
    Java发送邮件
  • 原文地址:https://www.cnblogs.com/jade640/p/6719294.html
Copyright © 2011-2022 走看看