我正在使用usort来排序我的数组。我有一个包含保修日期的阵列。以及对其进行排序的排序函数。但是,我遇到的问题是并非阵列中的所有项目都有保修。我想对数组进行排序,但总是将没有日期的数组放在底部。
function warrantyA($a, $b){
if($a->Warranty == "Available" and $b->Warranty == "Available"){
$a = explode('/', $a->WarrantyDescription);
$b = explode('/', $b->WarrantyDescription);
$today = date("d-m-Y");
$diffa = abs(strtotime($a[0]) - strtotime($today));
$diffb = abs(strtotime($b[0]) - strtotime($today));
$a = floor($diffa / 86400 / 30 );
$b = floor($diffb / 86400 / 30 );
return $a - $b;
}
}
以上是我现在的代码。它不按我想要的方式工作。每个对象都有保修和保修说明。如果有保修,那么它会说“可用”。
该代码采用保修并将其与今天的日期进行比较,以确定保修期内剩余的月数,并且我希望按该数字对其进行排序。
如何使这个功能化,以便任何没有保修的项目都放在阵列的底部?
答案 0 :(得分:2)
这是一个技巧:将$a->Warranty=="Available"
和$b->Warranty == "Available"
的结果转换为整数(将为零或一),然后对您所拥有的进行相似的减法。如果a有保修而b没有保修,则为1 - 0,或者a为更大。如果a不是b,则它将返回-1,如果它们都不返回0,则返回0.
$a_has = (int) $a->Warranty == "Available";
$b_has = (int) $b->Warranty == "Available";
if($a_has and $b_has){
// keep your code here
}
return $a_has - $b_has;