0

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;
    }
}

上記は私が今持っているコードです。それは私が望むようには機能しません。各オブジェクトには、保証と保証の説明があります。保証がある場合は、「利用可能」と表示されます。

コードは保証を取得し、それを今日の日付と比較して、保証の残りの月数を決定します。その数で並べ替えたいと思います。

保証のないアイテムがアレイの一番下に配置されるように、これを機能させるにはどうすればよいですか?

4

1 に答える 1

2

ここにちょっとしたトリックがあります: and の結果を$a->Warranty=="Available"int $b->Warranty == "Available"(0 または 1 になります) に変換し、あなたが持っているものと同様の減算を行います。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;
于 2012-07-10T16:11:30.630 に答える