arsort 没有给出预期的结果

arsort does not give the expected result

$a=array('a'=>'`a:1:`','b'=>'`a:`','c'=>'`a:0:`');
arsort($a);
print_r($a);

我希望这段代码能够输出

Array
(
    [a] => `a:1:`
    [c] => `a:0:`
    [b] => `a:`
)

但它实际上输出

Array
(
    [b] => `a:`
    [a] => `a:1:`
    [c] => `a:0:`
)

你明白为什么反引号乱七八糟了吗?

反引号将被视为排序字符。由于所有人都以一个不是 isuse 的字符串开始,但字符串的长度不同,因此在您的情况下会考虑最后一个反引号。查看示例数据,直到 : 之后所有值都相同,因此下一个要排序的字符是反引号、1 和 0,并且这些字符是反向排序的,这对我来说似乎是正确的。

给出我上面的评论作为答案,因为我猜这是正确的答案。

要扩展它,您可能需要使用 trim 执行 uasort 以删除反引号并进行反向排序。