首页 > 解决方案 > sort_flag 如何对数组进行排序?

问题描述

我有一个数组排序为

$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有人可以向我解释这些作品吗?

标签: phparrayssorting

解决方案


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_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


推荐阅读