使用PHP自定义排序 - 数字排序,列表末尾为0

时间:2010-09-28 08:53:34

标签: php sorting

在过去的几天里,我试图了解以下内容:

我有一个二维数组,我尝试使用usort()使用自定义算法对其进行排序。

我的问题是,我正在尝试按照1 2 3 0的顺序对数字进行排序,因此零应该始终是最后一项。

function customsort($e1, $e2) {
    if ($e1["number"] == $e2["number"]) {
        return $e1["year"] - $e2["year"];
    } elseif ($e1["number"] == 0) {
        return 1;
    } else {
        return $e1["number"] - $e2["number"];
    }
}

我认为这样可以解决这个问题,但只有一部分零件被分类到列表的末尾。我很害羞,列表没有损坏,并且整个数组的转储显示我,每个使用的条目都应该提供零,但它们没有按照正确的方式排序。

提前致谢, 约翰尼

1 个答案:

答案 0 :(得分:2)

您忘记将相同的推理应用于e2

function customsort($e1, $e2) {
    if ($e1["number"] == $e2["number"]) {
        return $e1["year"] - $e2["year"];
    } elseif ($e1["number"] == 0) {
        return 1;
    } elseif ($e2["number"] == 0) {
        return -1;
    } else {
        return $e1["number"] - $e2["number"];
    }
}

你比较函数必须让这个属性有意义

customsort($foo, $bar) == -1*customsort($bar, $foo)
每个$foo$bar

。特别是(你的情况出了什么问题)

customsort({'number'=>3},{'number'=>0}); // should give a negative number, because
customsort({'number'=>0},{'number'=>3}); // gives a positive number