【发布时间】:2018-10-22 17:13:42
【问题描述】:
让我从头告诉你:我知道这个函数的排序标志。当我使用SORT_STRING 时,它运行良好,但默认标志SORT_REGULAR 的工作很奇怪,或者根本不起作用。
考虑一个像下面这样的数组。
$arr = [
'27a' => 'foo',
'27b' => 'foo',
'27c' => 'foo',
'27' => 'foo',
];
当我尝试使用 ksort 进行排序时,它给出了一个数组,而没有按照任何明显的逻辑进行排序。
ksort($arr);
print_r($arr);
// this prints
Array
(
[27a] => foo
[27] => foo
[27b] => foo
[27c] => foo
)
正如人们所说的那样,键既不是numerically也不是alphanumerically也不是自然排序的。更奇怪的是,当我更改源数组的顺序时,它给出了不同的结果:
$arr = [
'27a' => 'foo',
'27' => 'foo',
'27b' => 'foo',
'27c' => 'foo',
];
ksort($arr);
print_r($arr);
// this prints
Array
(
[27b] => foo
[27c] => foo
[27] => foo
[27a] => foo
)
有人知道这背后的逻辑吗?这是一个错误还是我错过了什么?
编辑:感谢大家对我的问题感兴趣并回答。虽然它被标记为重复,但另一个问题没有提到更奇怪的部分:为什么改变源数组的顺序会改变结果?它应该在相同的输入集下给出相同的结果。我们也要讨论这个吗?
【问题讨论】:
-
感谢大家对我的问题感兴趣并回答。虽然它被标记为重复,但另一个问题没有提到更奇怪的部分:为什么更改源数组的顺序会改变结果?它应该使用相同的输入集给出相同的结果。我们也要讨论这个吗?