Сортировка многомерного массива? - PullRequest
3 голосов
/ 08 июля 2011

У меня есть массив, который выглядит так:

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 ]

5 голосов
/ 08 июля 2011

Вам нужно будет использовать функцию uasort. Попробуйте что-то вроде этого:

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

uasort($array, 'cmp');
4 голосов
/ 08 июля 2011

Вам определенно нужна функция usort .Вы можете определить, как функция сортировки определяет, какая из них больше или меньше.

Если все в порядке, что каждый под-массив («фильтров» и «счетчиков») переиндексируется, это должно работать отлично.Под переиндексированием я подразумеваю, что вновь отсортированный массив будет начинаться с 0, прогрессировать до 1 и т. Д. Это почти всегда так, как вы хотите, если только ваш исходный массив не является ассоциативным.

Например:

usort($array, "byCount");

function byCount($a, $b)
{
    if( $a['count'] == $b['count'] )
    {
        return 0;
    }
    return ($a['count'] < $b['count']) ? -1 : 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...