usort数组的值将索引在底部没有值
问题描述:
我正在使用usort排序我的数组。我有一个包含保修日期的阵列。还有一个排序函数。然而,我遇到的问题是,并非数组中的所有项目都有保修。我想对数组进行排序,但总是在底部放置没有日期的数组。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"
的结果转换为整数(将为零或一),然后对所得结果进行类似的减法运算。如果a有保修,而b没有保修,这将是1 - 0,或更大。如果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;
Intresting。我会试试这个,让你知道它是否适合我。感谢您的输入! – Marc 2012-07-10 16:58:20
好吧,这工作时,我按降序排序!谢谢!你有任何提升技巧吗?如显示最短保修率首先上升到最长,然后显示那些没有任何?现在发生的事情是它首先显示没有保修的产品。 – Marc 2012-07-10 18:15:25
交换最后一个表达式中的两个项,这应该将它们移动到结果的另一端。然后,保证人的排序全部在你的代码中。 – 2012-07-10 18:40:48