zoukankan      html  css  js  c++  java
  • 【php】sort函数整理

    sort函数整理

    1 主题:数字型排序(sort_numeric)

    案例1.1
    $arr = [3, 100, 1, 20, 4, 0];
    sort($arr, SORT_NUMERIC);
    out($arr);

    输出:0, 1, 3, 4, 20, 100

    案例1.2
    $arr = [2, 2.4, 1.2, 100, 10, 1.5, 1];
    sort($arr, SORT_NUMERIC);
    out($arr);

    输出:1, 1.2, 1.5, 2, 2.4, 10, 100

    2 主题 字符串型排序(sort_string)

    案例2.1
    $arr = [1, 10, 2];
    sort($arr, SORT_STRING);
    out($arr);

    输出:1,10,2

    3 主题:自然排序(SORT_NATURAL)
    对比3.1
    $arr = ['2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in'];
    sort($arr, SORT_STRING);
    out($arr);

    输出结果:
    1 ft 5 in,10 ft 2 in,2 ft 11 in,2 ft 7 in,7 ft 6 in,

    对比3.2
    $arr = ['2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in'];
    sort($arr, SORT_NATURAL);
    out($arr);

    输出结果:
    1 ft 5 in,2 ft 7 in,2 ft 11 in,7 ft 6 in,10 ft 2 in

    备注:
    // 关于自然序 这个链接很好 https://pypi.org/project/natsort/


    4,主题:大小写不敏感(SORT_FLAG_CASE)

    // can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively

    案例4.1
    $arr = ['orange', 'Orange', 'apple', 'Apple'];
    sort($arr, SORT_STRING);
    out($arr);

    输出:
    Apple,Orange,apple,orange,

    案例4.2
    $arr = ['orange', 'Orange', 'apple', 'Apple'];
    sort($arr, SORT_FLAG_CASE | SORT_STRING);
    out($arr);

    输出:
    apple,Apple,orange,Orange,

    解释:
    第一个案例;单纯的string排序,是按照ascii排序的
    因为大写字母比小写字母的ascii排序靠前,排序也更靠前
    所以,输出的结果是:Apple,Orange,apple,orange

    第二个案例:按照string不敏感方式排序,先将大写字母转换成小写字母,再按ascii码排序
    第一步转换:大写字母->小写, Apple->apple
    第二步排序:apple, apple, orange, orange
    第三步映射回原始数据: apple, Apple, orange, Orange

    这里还有个问题,apple和Apple的排序是否稳定?

    案例4.3
    $arr = ['Orange', 'orange', 'apple', 'Apple'];
    sort($arr, SORT_FLAG_CASE | SORT_STRING);
    out($arr);
    这里看到和案例4.2对比,结果是不稳定的, orange, Orange的顺序是不定的,
    它只能保证, 都是小写字母的情况下,不同的字符串的排序, 但是对于不同的大小写字符串转换为相同的小写字符串时,排序不保证的

    这就提醒我们,在用SORT_FLAG_CASE | SORT_STRING排序时,一定不要对此种情况有预期

    案例4.4
    $arr = ['2 ft 7 In', '1 ft 5 in', '10 ft 2 in', '2 Ft 11 in', '7 Ft 6 in'];
    sort($arr, SORT_NATURAL);
    out($arr);
    结果:1 ft 5 in,2 Ft 11 in,2 ft 7 In,7 Ft 6 in,10 ft 2 in


    案例4.5
    $arr = ['2 Ft 7 In', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 Ft 6 in'];
    sort($arr, SORT_NATURAL | SORT_FLAG_CASE);
    out($arr);
    结果:
    1 ft 5 in,2 Ft 7 In,2 ft 11 in,7 Ft 6 in,10 ft 2 in,

    可以看到
    4.4 案例中的2 Ft 11 in, 2 ft 7 In,这个不符合自然排序
    而4.5 用sort_flag_case来消除了大小写敏感的限制, 修正成为大小写不敏感的自然排序,排序结果更符合人类理解

    总结:
    现在再来看这个注释,就容易理解了
    can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively
    必须要和其他排序方式一起使用,意味着,只有两种用法:
    SORT_FLAG_CASE | SORT_STRING
    SORT_FLAG_CASE | SORT_NATURAL


    整体的介绍页面:https://www.php.net/manual/en/function.sort.php

    特别的,
    If two members compare as equal, their relative order in the sorted array is undefined.

    如果两个成员的比较是相同的,他们的相对位置是不确定的

  • 相关阅读:
    泉音作伴到云乡
    给力品牌营销,打造自己的知名度品牌
    【linux】如何利用mkfifo命令让程序产生的文件直接生成压缩文件
    【linux/perl】终端运行的程序怎么屏蔽错误信息的输出?
    四个俄罗斯人算法(Method of Four Russians)
    perl 释放内存问题【转】
    【perl】perl实现case条件判断的语句
    【linux】/dev/null与/dev/zero详解
    【perl】打开多个文件——文件句柄的使用
    EM算法——最大期望算法(Expectationmaximization algorithm)
  • 原文地址:https://www.cnblogs.com/helww/p/14085179.html
Copyright © 2011-2022 走看看