【问题标题】:PHP sorting issue, arsort vs asort + array_reversePHP排序问题,arsort vs asort + array_reverse
【发布时间】:2012-07-24 12:29:56
【问题描述】:

我最近正在研究一个项目欧拉问题集,遇到了这个奇怪的问题。我已经用第一个解决方案正确解决了问题,但我不知道为什么其他版本不能按预期工作。

这是有效的代码:

asort($card_count, SORT_NUMERIC);
$card_count = array_reverse($card_count, true);

这是没有的代码:

arsort($card_count, SORT_NUMERIC);

这是我唯一改变的一行,它对最终结果产生了巨大的影响。有什么想法吗?

【问题讨论】:

  • 你以后如何读取数组——你使用什么索引?
  • 这两个对我来说都是一样的:codepad.org/80bWvlTv
  • 这是一个扑克解决方案,所以基本上它是将键中的卡值(例如'2'或'A'或'J')映射到它在输入中出现的次数,所以它可能看起来像这样 ['A' => 2, '8' => 2, '4' => 1] 代表两个 A,两个 8 和一个 4。我依靠这样一个事实,即最高金额应该在前面,而较低的金额应该在后面。如有必要,我可以发布完整的代码解决方案,只是不想泄露答案,因为我知道它违反 PE 政策。
  • 所以你说这是家庭作业。
  • 法律,不,正如我在问题中所说,它是一个我已经解决的项目欧拉问题......

标签: php sorting


【解决方案1】:

问题在于对数组中的相等值进行排序。取数组:

$arr = array(
    'a' => 1,
    'b' => 1,
    'c' => 1,
    'd' => 1
);

在这个数组上调用asort($arr, SORT_NUMERIC)反转数组。因此,代码行:

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);

将数组放回原始顺序

因此,添加一个更高的值并像这样更改数组:

$arr = array(
    'a' => 1,
    'b' => 1,
    'c' => 2,
    'd' => 1
);

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);

会成功:

Array
(
    [c] => 2
    [a] => 1
    [b] => 1
    [d] => 1
)

同时

arsort($arr, SORT_NUMERIC);

会成功:

Array
(
    [c] => 2
    [d] => 1
    [b] => 1
    [a] => 1
)

希望这能对这个问题有所启发......

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2013-03-11
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多