双排序数组

时间:2012-11-28 19:47:50

标签: php arrays multidimensional-array sorting

我的数组的排序值为1-6。

Array: 2 5 6 2 5 1 1

然后我可以在其他任何事情之前得到第一个。例如。

所以它就像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;
        }
    });
}

我很想得到一些帮助,整天都在拉我的头发。

非常感谢!

1 个答案:

答案 0 :(得分: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"];
            }
        }
    });
}

DEMO:http://codepad.viper-7.com/3PMtmA