在底部放置没有值的索引的值数组

时间:2012-07-10 16:04:49

标签: php date sorting 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;
    }
}

以上是我现在的代码。它不按我想要的方式工作。每个对象都有保修和保修说明。如果有保修,那么它会说“可用”。

该代码采用保修并将其与今天的日期进行比较,以确定保修期内剩余的月数,并且我希望按该数字对其进行排序。

如何使这个功能化,以便任何没有保修的项目都放在阵列的底部?

1 个答案:

答案 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;