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

Тема в разделе "PHP", создана пользователем SergXP, 3 мар 2011.

Модераторы: latteo
  1. SergXP

    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  ( )
                                )
                        )
                   )
    )
    
    прошу помощи, третий день уже бьюсь, и безрезультатно
    есть идеи?
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    откуда данные берутся?
    если из БД то может есть смысл изначлаьно их группировать запросом? а не получать массивы и в пхп объединять/клеить
     
  3. SergXP

    SergXP Постоялец

    Регистр.:
    8 мар 2008
    Сообщения:
    66
    Симпатии:
    11
    Из БД, это списки смежности.
    Пишу класс, но проблема такая, что мне нужно выводить выбранные категории.
    Инфу брал отсюда
    http://phpclub.ru/faq/Tree/Al?v=4nm

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

    пытаюсь написать ф-цию, которая должна создавать дерево по параметру. Ну например, передаю ключи array(10,4,16);
    Результат должен быть:
    т.е. дерево грузится и раскрывается по ключам, а не все...
    решил делать так..
    создаю массив путей
    в данном примере это
    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)

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

    Ребят, помогите кто может =(
     
  4. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
  5. SergXP

    SergXP Постоялец

    Регистр.:
    8 мар 2008
    Сообщения:
    66
    Симпатии:
    11
    ага, спасибо! половину ссылок проходил)) но решил пока оставить на массивах))
    кстати, все! метод все-таки реализовал =)