1
我有一个对象数组(目标),我想根据它们的属性2,Status
和DueDate
进行排序。无法根据2个变量找出usort逻辑
下面是规则:
以下状态:
- 设计
- 批准
- 在进步
- 完成
- 存档
如果目标的状态为4(已完成)或5(存档),那么DueDate
无关紧要。
如果目标既不是4还是5及其DueDate
小于现在则是“过期”,应该是在顶部
如果目标不是“过期”,那么状态的顺序确定它的位置(从最低到最高)
如果$a
和$b
都是“过期”,那么,一个具有最早DueDate
更重要的是
的顺序应该是:
- 逾期
- 设计
- 批准
- 在进步
- 完成
- 存档
这里是我试过的最后一件事:
function cmp($a, $b)
{
$now = new DateTime("now");
$aDueDate = new DateTime($a->GetDueDate());
$bDueDate = new DateTime($b->GetDueDate());
if($a->GetStatus() != 4 && $a->GetStatus() != 5 && $b->GetStatus() != 4 && $b->GetStatus() != 5){
if($aDueDate < $now || $bDueDate < $now){
if($aDueDate == $bDueDate){
return 0;
}
return ($aDueDate < $bDueDate) ? -1 : 1;
}
}
elseif(($a->GetStatus() == 4 || $a->GetStatus() == 5) && ($b->GetStatus() != 4 && $b->GetStatus() != 5)) {
return -1;
}
elseif(($a->GetStatus() != 4 && $a->GetStatus() != 5) && ($b->GetStatus() == 4 || $b->GetStatus() == 5)){
return 1;
}
if ($a->GetStatus() == $b->GetStatus()) {
return 0;
}
return ($a->GetStatus() < $b->GetStatus()) ? -1 : 1;
}
哪些订单数组升IKE这样:
- 完成
- 存档
- 逾期
- 设计
- 批准
- 在进步
完美地工作,非常感谢。 – 2013-04-25 13:32:47
其实在看了你的代码之后,我意识到我的程序确实可以正常工作,我只是在中间的elseif语句中将-1和1切换了起来。 – 2013-04-25 13:38:15