сгруппировать многомерный массив

SergXP

Постоялец
Регистрация
8 Мар 2008
Сообщения
66
Реакции
11
Всем добрый вечер!
Имеется два массива
массив для группирования (1)
Код:
Array
(
    [0] => Array
        (
            [k_item] => 1
            [s_name] => Автомобили
            [a_tree] => Array ( )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [k_item] => 3
                    [s_name] => Audi
                    [a_tree] => Array  ( )
                )
            [1] => Array
                (
                    [k_item] => 4
                    [s_name] => BMW
                    [a_tree] => Array  ( )
                )
            [2] => Array
                (
                    [k_item] => 5
                    [s_name] => Ford
                    [a_tree] => Array  ( )
                )
            [3] => Array
                (
                    [k_item] => 6
                    [s_name] => Kia
                    [a_tree] => Array  ( )
                )
            [4] => Array
                (
                    [k_item] => 7
                    [s_name] => Mazda
                    [a_tree] => Array  ( )
                )
            [5] => Array
                (
                    [k_item] => 8
                    [s_name] => Mitsubishi
                    [a_tree] => Array  ( )
                )
            [6] => Array
                (
                    [k_item] => 9
                    [s_name] => Nissan
                    [a_tree] => Array  ( )
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [k_item] => 10
                    [s_name] => A4
                    [a_tree] => Array  ( )
                )
            [1] => Array
                (
                    [k_item] => 11
                    [s_name] => A6
                    [a_tree] => Array  ( )
                )
            [2] => Array
                (
                    [k_item] => 12
                    [s_name] => A8
                    [a_tree] => Array  ( )
                )
        )
)
и массив ключей(2), по которому должна произойти группировка
Код:
Array
(
    [0] => Array
         (
             [k_item] => 1
             [s_name] => Автомобили
             [a_tree]   => Array 
                 (
                  )
          )
    [1] => Array
         (
             [k_item] => 3
             [s_name] => Audi
             [a_tree]   => Array 
                 (
                  )
          )
    [2] => Array
         (
             [k_item] => 10
             [s_name] => A4
             [a_tree]   => Array 
                 (
                  )
          )
)
суть такая что первый массив, должен сложиться как гармошка
думаю алгоритм должен начинать сжимать массив с конца к началу
т.е. последний с предпоследним, удалили последний, опять последний с предпоследним, удалили последний.
В результате останется один элемент в главном массиве.
Вот что должно получиться в итоге:
Код:
Array
(
    [0] => Array
        (
            [k_item] => 1
            [s_name] => Автомобили
            [a_tree] => Array 
            ( 
                         [0] => Array
                            (
                                [k_item] => 3
                                [s_name] => Audi
                                [a_tree] => Array  
                                    (
                                                    [0] => Array
                                                         (
                                                             [k_item] => 10
                                                             [s_name] => A4
                                                             [a_tree] => Array  ( )
                                                          )
                                                   [1] => Array
                                                        (
                                                             [k_item] => 11
                                                             [s_name] => A6
                                                             [a_tree] => Array  ( )
                                                        )
                                                   [2] => Array
                                                        (
                                                             [k_item] => 12
                                                             [s_name] => A8
                                                             [a_tree] => Array  ( )
                                                        )
                                     )
                            )
                        [1] => Array
                            (
                                [k_item] => 4
                                [s_name] => BMW
                                [a_tree] => Array  ( )
                            )
                        [2] => Array
                            (
                                [k_item] => 5
                                [s_name] => Ford
                                [a_tree] => Array  ( )
                            )
                        [3] => Array
                            (
                                [k_item] => 6
                                [s_name] => Kia
                                [a_tree] => Array  ( )
                            )
                        [4] => Array
                            (
                                [k_item] => 7
                                [s_name] => Mazda
                                [a_tree] => Array  ( )
                            )
                        [5] => Array
                            (
                                [k_item] => 8
                                [s_name] => Mitsubishi
                                [a_tree] => Array  ( )
                            )
                        [6] => Array
                            (
                                [k_item] => 9
                                [s_name] => Nissan
                                [a_tree] => Array  ( )
                            )
                    )
               )
)

прошу помощи, третий день уже бьюсь, и безрезультатно
есть идеи?
 
откуда данные берутся?
если из БД то может есть смысл изначлаьно их группировать запросом? а не получать массивы и в пхп объединять/клеить
 
Из БД, это списки смежности.
Пишу класс, но проблема такая, что мне нужно выводить выбранные категории.
Инфу брал отсюда


а проблема, такая:
Имеем дерево:

1) Автомобили
3) Audi
10) A4
11) A6
12) A8
4) BMW
13) 323
14) 525
15) 725
5) Ford
6) Kia
7) Mazda
8) Mitsubishi
9) Nissan
2) Мобильные телефоны
16) Nokia
20) 5800
21) Navigator
22) XpressMusic
18) N95
19) N97
17) Sony Ericsson
23) K790i
24) Xperia

пытаюсь написать ф-цию, которая должна создавать дерево по параметру. Ну например, передаю ключи array(10,4,16);
Результат должен быть:
1) Автомобили
3) Audi
10) A4 // выбран этот
11) A6
12) A8
4) BMW // этот
13) 323
14) 525
15) 725
5) Ford
6) Kia
7) Mazda
8) Mitsubishi
9) Nissan
2) Мобильные телефоны
16) Nokia // этот
20) 5800
18) N95
19) N97
17) Sony Ericsson

т.е. дерево грузится и раскрывается по ключам, а не все...
решил делать так..
создаю массив путей
в данном примере это
1) 1-3-10
2) 1-4
3) 2-16

далее, загружаю уровни для каждого пути,
1) 1-(3-4-5-6-7-8-9) || 3-(10-11-12) || у 10, нет уровней, он последний
2) 1-(3-4-5-6-7-8-9) || 4-(13-14-15)
3) 2-(16-17) || 16-(20-18-19)

а потом уже все ото объединить по ключам..

Ребят, помогите кто может =(
 
ага, спасибо! половину ссылок проходил)) но решил пока оставить на массивах))
кстати, все! метод все-таки реализовал =)
 
Назад
Сверху