我最近正在研究一个项目欧拉问题集,遇到了这个奇怪的问题。我已经用第一个解决方案正确解决了这个问题,但我不知道为什么其他版本不能按预期工作。
这是有效的代码:
asort($card_count, SORT_NUMERIC);
$card_count = array_reverse($card_count, true);
这是没有的代码:
arsort($card_count, SORT_NUMERIC);
这是我改变的唯一一条线,它对最终结果产生了巨大的影响。有什么想法吗?
问题出现在对数组中相等的值进行排序时。取数组:
$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
)
希望这对这个问题有所启发......