【问题标题】:How does the sort_flag works for sorting the array? [duplicate]sort_flag 如何对数组进行排序? [复制]
【发布时间】:2020-04-13 18:43:55
【问题描述】:

我有一个要排序的数组

$numbers = array(24, 19, 3, 16, 56, 8, 171);
sort($numbers, SORT_STRING);
print_r($numbers);

因此,当我对数组进行排序时,我得到的结果为

(
    [0] => 16
    [1] => 171
    [2] => 19
    [3] => 24
    [4] => 3
    [5] => 56
    [6] => 8
)

SORT_STRING 是如何工作的,谁能给我解释一下?

【问题讨论】:

  • 你可能想要SORT_NATURAL
  • 不,我一开始不明白标志的工作原理,但我现在明白了。

标签: php arrays sorting


【解决方案1】:

SORT_STRING 将逐个字符地比较一个单词。所以字母 A 比 B“更高”(或更低,您的选择),B > C。

1 > 2, 2 > 3, 11 > 12 等等。

因此,在您的情况下,将 24 与 19 进行比较时,它将 1 与 2 进行比较,然后排序。 再举个例子,19 和 16 比较时,先比较 1 和 1,相等,再比较 9 和 6,使 6(和 16)高位。

更多信息在这里:PHP, sort, sort_flags

如果您想更深入地挖掘,这是 PHP 源代码的链接。 这是它根据排序标志选择排序算法的行: https://github.com/php/php-src/blob/50765075db6b6d5a9597589601c59f743f6ee9c8/ext/standard/array.c#L502

在这里执行比较/排序: https://github.com/php/php-src/blob/50765075db6b6d5a9597589601c59f743f6ee9c8/ext/standard/array.c#L207

然后它会调用一个 zend 操作符: https://github.com/php/php-src/blob/5430a466ff31422b436df076581d8345531db975/Zend/zend_operators.c

【讨论】:

  • 谢谢我知道了。
【解决方案2】:

SORT_STRING 将项目作为字符串进行比较。你可以在这里找到更多细节:https://www.php.net/manual/en/function.sort.php 一个简单的例子是当您对计算机上的文件或目录进行排序时:排序是按字母顺序排列的。

【讨论】:

    【解决方案3】:

    这作为所有数字的第一个数字(如 16工作原理基本上它从最左边的数字开始排列数字,然后按前面的数字(右)继续排列它们。

    例如:比较16和171

    由于这两个数字的最左边的数字都是 1,因此它会根据它们的下一个数字(右边的数字)对其数字进行排序。

    因此,按照规则,您会得到一个结果数组

    (
        [0] => 16
        [1] => 171
        [2] => 19
        [3] => 24
        [4] => 3
        [5] => 56
        [6] => 8
    )
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 2022-01-20
      • 2019-12-11
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多