php - 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
有人可以向我解释这些作品吗?
解决方案
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
推荐阅读
- javascript - 分组条形图中的 D3 条没有占据图表的整个宽度
- python - 从 Python 中的函数打印参数的名称
- python - 芹菜节拍时间表运行不准确
- php - Laravel 无法从 URL 接收(处理)PHP 变量,但只能在远程接收
- c# - 从 StreamReader 将字符串拆分为数组
- flexbox - 使用 flex-basis 时如何在 @each scss 中使用 % 符号
- android - 删除元素后 RecyclerView 列表没有刷新
- c++ - 有没有办法将 QTableWidget 中的整数数据显示为十六进制?
- c# - 沃尔沃创新门户 API 的实施
- python - Edit setup to allow argument mismatch in gcc compilation