Сортировка и группировка многомерного массива в php - PullRequest
1 голос
/ 02 июня 2011

Мне нужна помощь с сортировкой многомерного массива в php.Мне нужно, чтобы массив был сгруппирован по месяцам, а затем отсортирован по месяцам.Вот мой оригинальный массив:

Array
(
    [0] => Array
        (
            [IdEvent] => 5
            [EventName] => Copy of Opening snow weekend
            [Year] => 2011
            [Month] => 08
        )

    [1] => Array
        (
            [IdEvent] => 7
            [EventName] => Copy of Copy of Opening snow weekend
            [Year] => 2011
            [Month] => 07
        )

    [2] => Array
        (
            [IdEvent] => 1
            [EventName] => Opening snow weekend
            [Year] => 2011
            [Month] => 05
        )

    [3] => Array
        (
            [IdEvent] => 6
            [EventName] => Copy of Opening snow weekend
            [Year] => 2011
            [Month] => 05
        )

)

И вот что я надеюсь получить:

Array
(

    [0] => Array (

        [0] => Array
            (
                [IdEvent] => 1
                [EventName] => Opening snow weekend
                [Year] => 2011
                [Month] => 05
            )

        [1] => Array
            (
                [IdEvent] => 6
                [EventName] => Copy of Opening snow weekend
                [Year] => 2011
                [Month] => 05
            )

    )

    [1] => Array (

        [0] => Array
            (
                [IdEvent] => 7
                [EventName] => Copy of Copy of Opening snow weekend
                [Year] => 2011
                [Month] => 07
            )

    )

    [2] => Array (

        [0] => Array
            (
                [IdEvent] => 5
                [EventName] => Copy of Opening snow weekend
                [Year] => 2011
                [Month] => 08
            )
    )

)

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Я бы использовал легко сортируемый ключ для каждого месячного контейнера, затем просто использовал бы ksort

$months = array();
foreach ($input_array AS $arr) {
  $months[$arr['Month']][] = $arr;
}
ksort($months);

если хотите, вы можете использовать array_values, чтобы превратить его в стандартный массив целочисленных ключей

1 голос
/ 02 июня 2011

Может быть, просто может быть что-то вроде этого:

$sortedArray = array();

foreach ($unsortedArray as $key => $row) {
  $month[$key] = $row['month'];
  $year[$key]  = $row['year'];
}

$sortedArray =  array_multisort($year, SORT_ASC, $month, SORT_ASC, $unsortedArray);
  • Совершенно непроверенный, непроверенный, экспериментальный и от макушки.
  • Вам может понадобиться SORT_NUMERIC вместо SORT_ASC, я не уверен.
...