我有一组对象(目标),我想根据它们的 2 个属性(theStatus
和DueDate
.
以下是规则:
状态:
- 设计
- 得到正式认可的
- 进行中
- 完全的
- 存档
如果目标的状态为 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;
}
像这样对数组进行排序:
- 完全的
- 存档
- 逾期
- 设计
- 得到正式认可的
- 进行中