我正在使用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;
}
}
以上就是我现在拥有的代码。它并没有按照我想要的方式工作。每个物体都有保修和保修说明。如果有保修,它会说"可用"。
代码获取保修并将其与今天的日期进行比较,以确定保修剩余的月数,我想按这个数字进行排序。
如何使此功能发挥作用,以便将任何没有保修的项目放置在阵列的底部?
这里有一个技巧:将$a->Warranty=="Available"
和$b->Warranty == "Available"
的结果转换为int(将为零或一),然后对所得到的进行类似的减法运算。如果a有保修,而b没有,这将是1-0,或者a更大。如果a没有,但b有,它将返回-1,如果两者都没有,则返回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;