uasort()没有执行所有可能的比较

时间:2015-12-28 21:41:32

标签: php sorting

我有这段代码:

$ids = array(13952979,13952983,13952997,13952999,13953001,13953009,13953011,13953013);
uasort($ids, function($a, $b){
  echo $a . ',' . $b . "<br>";
});

这最终回应:

13952999,13952983
13953013,13952999
13952999,13952997
13953011,13952999
13952999,13952979
13953009,13952999
13953001,13952999
13952997,13952979
13952983,13952997
13953013,13953001
13953009,13953013
13953011,13953013
13953009,13953011

请注意,组合13952979,13952983 - 或其反向 - 不是比较之一。这导致排序仅部分排序。

为什么不在1395297913952983之间进行比较?我怎样才能使它执行所有可能的比较?

2 个答案:

答案 0 :(得分:2)

没有必要执行所有可能的比较来排序数组。它执行了比较13952997,1395297913952983,13952997。从中可以推断出13952979,13952983的结果,因此不需要明确地进行。

答案 1 :(得分:0)

您没有排序,至少不是当前代码。在您的函数中没有进行比较,因此PHP使用默认返回值,该值等于0(所有项目都相等),导致您注意到的行为不正确。

这应该表现得更好:

uasort($ids, function($a, $b){
    echo $a . ',' . $b . "<br>";
    return $a - $b; // or $b - $a, depending on the sort order you need
});