PHP排序问题,arsort vs asort + array_reverse

maj*_*nie 7 php sorting

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

这是有效的代码:

asort($card_count, SORT_NUMERIC);
$card_count = array_reverse($card_count, true);
Run Code Online (Sandbox Code Playgroud)

这里的代码不是:

arsort($card_count, SORT_NUMERIC);
Run Code Online (Sandbox Code Playgroud)

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

kei*_*eld 4

对数组中的相等值进行排序时会出现问题。取数组:

$arr = array(
    'a' => 1,
    'b' => 1,
    'c' => 1,
    'd' => 1
);
Run Code Online (Sandbox Code Playgroud)

调用asort($arr, SORT_NUMERIC)该数组将反转该数组。因此,代码行:

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);
Run Code Online (Sandbox Code Playgroud)

会将数组放回原来的顺序

因此,添加一个更高的值并更改数组,如下所示:

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

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);
Run Code Online (Sandbox Code Playgroud)

会产生:

Array
(
    [c] => 2
    [a] => 1
    [b] => 1
    [d] => 1
)
Run Code Online (Sandbox Code Playgroud)

尽管

arsort($arr, SORT_NUMERIC);
Run Code Online (Sandbox Code Playgroud)

会产生:

Array
(
    [c] => 2
    [d] => 1
    [b] => 1
    [a] => 1
)
Run Code Online (Sandbox Code Playgroud)

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