对多维数组进行排序?

时间:2011-07-08 15:22:03

标签: php multidimensional-array

我有一个如下所示的数组:

Array ( [0] => Array ( [filters] => Array ( [filter_1] => 1 
                                            [filter_2] => 1 
                                            [filter_3] => 1 
                                            [filter_4] => 1 
                                            [filter_5] => 1 
                                            [filter_6] => 1 ), 
                       [count]   => 2),

        [1] => Array ( [filters] => Array ( [filter_1] => 1 
                                            [filter_2] => 1 
                                            [filter_3] => 1 
                                            [filter_4] => 1 
                                            [filter_5] => 1 
                                            [filter_6] => 1 ), 
                       [count]   => 34)

        [2] => Array ( [filters] => Array ( [filter_1] => 1 
                                            [filter_2] => 1 
                                            [filter_3] => 1 
                                            [filter_4] => 1 
                                            [filter_5] => 1 
                                            [filter_6] => 1 ), 
                        [count]   => 7)

是否可以通过每个中的[count]键对主数组键进行排序,降序?因此它们按以下顺序排列:1 -2 -0

2 个答案:

答案 0 :(得分:5)

您需要使用uasort功能。尝试这样的事情:

function cmp($a, $b) {
    if ($a["count"] == $b["count"]) {
        return 0;
    }
    return ($a["count"] > $b["count"]) ? -1 : 1;
}

uasort($array, 'cmp');

答案 1 :(得分:4)

您肯定需要usort功能。您可以定义sort函数如何确定哪个更大或更小。

如果每个子阵列(“过滤器”和“计数”)都被重新编入索引,那么这应该是完美的。通过重新索引,我的意思是新排序的数组将从0开始,进展到1,等等。除非原始数组是关联的,否则这几乎总是如你所愿。

例如:

usort($array, "byCount");

function byCount($a, $b)
{
    if( $a['count'] == $b['count'] )
    {
        return 0;
    }
    return ($a['count'] < $b['count']) ? -1 : 1;
}