让我从头开始告诉你:我知道这个函数的排序标志。当我使用
考虑下面这样一个数组。
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
)
可以说,这些键既不是按数字顺序排列的,也不是按字母数字顺序排列的,也不是按自然顺序排列的。更奇怪的是,当我改变源数组的顺序时,它会产生不同的结果:
$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
)
有人知道这背后的逻辑吗?这是一个bug还是我漏掉了什么?
编辑:感谢大家对我的问题感兴趣并回答。虽然它被标记为重复,但另一个问题没有提到更奇怪的部分:为什么改变源数组的顺序会改变结果?它应该在相同的输入集下给出相同的结果。 我们也讨论一下这个问题吧。