【问题标题】:arsort does not give the expected resultarsort 没有给出预期的结果
【发布时间】:2018-03-16 23:22:15
【问题描述】:
$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,它们是反向排序的,这对我来说似乎是正确的。
  • 哦,这该死的对,我一直认为反引号不是字符串的一部分
  • 如果它解决了您的问题,请考虑将此标记为已回答 - meta.stackexchange.com/questions/5234/…

标签: php sorting backticks


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2021-01-06
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多