Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php usort值数组将没有值的索引放在底部_Php_Date_Sorting_Usort - Fatal编程技术网

Php 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

我正在使用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更大。如果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;

有趣。我会尝试一下,让你知道它是否适合我。谢谢你的意见!好的,当我按降序排序时,这就起作用了!非常感谢。你有上升的技巧吗?在显示最短保修时,先升到最长保修,然后显示没有保修的保修?现在发生的事情是先显示那些没有保证的项。交换最后一个表达式中的两个项,这会将它们移到结果的另一端。那么,对有保修的产品进行分类就完全在代码中了。