3

私の配列には、1 ~ 6 の並べ替え値があります。

Array: 2 5 6 2 5 1 1

そして、たとえば、何よりも先に2の最初を取得できます。

のようになります2 2 5 6 5 1 1。しかし、その後、他のソート値と日付でソートする必要があります。

例:2 2 1 1 5 5 6これらには日付も添付されており、降順でソートする必要があります。

最後の例:

2 - 2012-06-02
2 - 2012-06-01
1 - 2012-03-05
1 - 2012-03-01
5 - 2012-08-09
5 - 2012-01-01
6 - 2012-11-29

私の関数は現時点ではこのように見え、usort 関数で使用されています。ObjektTyp は並べ替え値で、家の種類によって数値が異なります。これらの値はすべて XML ソースから取得されます。

function sort_by_type(&$array, $sort = NULL)
{
    usort($array, function($a, $b) use ($sort)
    {
        if ($a["ObjektTyp"] == $sort) {
            return -1;
        } else {
            return 1;
        }
    });
}

一日中髪を引っ張っているので、これについて何か助けてもらいたいです。

どうもありがとうございました!

4

1 に答える 1

0

最初に数字で並べ替え、次に日付で並べ替えます。これは、番号が同じであるかどうかを確認してから、日付で並べ替えることによって実行できます。

このようなもの:

function sort_by_type(&$array, $sort = NULL){
    usort($array, function($a, $b) use ($sort){
        if($a["ObjektTyp"] == $b["ObjektTyp"]){
            // already sorted by number, sort by date
            return strtotime($b['date']) - strtotime($a['date']); // sort descending
        }
        else{
            // sort by number
            if ($a["ObjektTyp"] == $sort) {
                return -1;  // 2s to the top
            }
            elseif($b["ObjektTyp"] == $sort){
               return 1;  // 2s to the top 
            }
            else {
                return $a["ObjektTyp"] - $b["ObjektTyp"];
            }
        }
    });
}

デモ:http ://codepad.viper-7.com/3PMtmA

于 2012-11-28T20:29:41.667 に答える