在过去的几天里,我试图了解以下内容:
我有一个二维数组,我尝试使用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"];
}
}
我认为这样可以解决这个问题,但只有一部分零件被分类到列表的末尾。我很害羞,列表没有损坏,并且整个数组的转储显示我,每个使用的条目都应该提供零,但它们没有按照正确的方式排序。
提前致谢, 约翰尼
答案 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