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