Php usort值数组将没有值的索引放在底部
我正在使用usort对数组进行排序。我有一个包含保修日期的数组。还有一个排序函数对其进行排序。但是,我遇到的问题是,阵列中并非所有项目都有保修。我想对数组进行排序,但总是将没有日期的数组放在底部Php usort值数组将没有值的索引放在底部,php,date,sorting,usort,Php,Date,Sorting,Usort,我正在使用usort对数组进行排序。我有一个包含保修日期的数组。还有一个排序函数对其进行排序。但是,我遇到的问题是,阵列中并非所有项目都有保修。我想对数组进行排序,但总是将没有日期的数组放在底部 function warrantyA($a, $b){ if($a->Warranty == "Available" and $b->Warranty == "Available"){ $a = explode('/', $a->WarrantyDescript
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更大。如果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;
有趣。我会尝试一下,让你知道它是否适合我。谢谢你的意见!好的,当我按降序排序时,这就起作用了!非常感谢。你有上升的技巧吗?在显示最短保修时,先升到最长保修,然后显示没有保修的保修?现在发生的事情是先显示那些没有保证的项。交换最后一个表达式中的两个项,这会将它们移到结果的另一端。那么,对有保修的产品进行分类就完全在代码中了。