За последние 24 часа нас посетили 18913 программистов и 1631 робот. Сейчас ищут 973 программиста ...

Помогите создать функцию наполнения сложного массива из БД

Тема в разделе "Прочие вопросы по PHP", создана пользователем lecherg, 30 апр 2014.

  1. lecherg

    lecherg Новичок

    С нами с:
    30 апр 2014
    Сообщения:
    2
    Симпатии:
    0
    Код (Text):
    1.  
    2. CREATE TABLE `divs` (
    3.   `id` int(11) NOT NULL AUTO_INCREMENT,
    4.   `id_parent` int(11) NOT NULL,
    5.   `name` varchar(255) NOT NULL,
    6.   `type` varchar(22) NOT NULL,
    7.   `lang` int(1) NOT NULL DEFAULT '1',
    8.   PRIMARY KEY (`id`)
    9. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
    10.  
    11. INSERT INTO `divs` (`id`, `id_parent`, `name`, `type`, `lang`) VALUES
    12. (1, 0, 'Главная', '1', 1),
    13. (3, 0, 'Новости', '2', 1),
    14. (4, 0, 'О компании', '1', 1),
    15. (5, 0, 'Клиенты', '1', 1),
    16. (6, 0, 'Контакты', '1', 1),
    17. (10, 4, 'История', '1', 1),
    18. (11, 4, 'Учредители', '1', 1),
    19. (24, 10, 'Начало', '1', 1),
    20. (25, 10, 'Середина', '1', 1),
    21. (26, 10, 'Конец', '1', 1);
    Необходимо сделать функцию, которая создает массив вида

    Код (Text):
    1. Array
    2. (
    3.         [0] => Array
    4.         (
    5.             [id] => 1
    6.             [id_parent] => 0
    7.             [name] => Главная
    8.             [type] => 1
    9.             [lang] => 1
    10.         )
    11.    
    12.         [1] => Array
    13.         (
    14.             [id] => 3
    15.             [id_parent] => 0
    16.             [name] => Новости
    17.             [type] => 1
    18.             [lang] => 1
    19.         )
    20.        
    21.         [2] => Array
    22.         (
    23.             [id] => 4
    24.             [id_parent] => 0
    25.             [name] => О компании
    26.             [type] => 1
    27.             [lang] => 1
    28.             [parent] => Array
    29.                         (
    30.                                 [0] => Array
    31.                                 (
    32.                                     [id] => 10
    33.                                     [id_parent] => 4
    34.                                     [name] => История
    35.                                     [type] => 1
    36.                                     [lang] => 1
    37.                                     [parent] => Array
    38.                                                     (
    39.                                                             [0] => Array
    40.                                                             (
    41.                                                                 [id] => 24
    42.                                                                 [id_parent] => 10
    43.                                                                 [name] => Начало
    44.                                                                 [type] => 1
    45.                                                                 [lang] => 1
    46.                                                             )
    47.                                        
    48.                                                             [1] => Array
    49.                                                             (
    50.                                                                 [id] => 25
    51.                                                                 [id_parent] => 10
    52.                                                                 [name] => Середина
    53.                                                                 [type] => 1
    54.                                                                 [lang] => 1
    55.                                                             )
    56.                                                            
    57.                                                             [2] => Array
    58.                                                             (
    59.                                                                 [id] => 26
    60.                                                                 [id_parent] => 10
    61.                                                                 [name] => Конец
    62.                                                                 [type] => 1
    63.                                                                 [lang] => 1
    64.                                                             )
    65.                                                     )
    66.                                 )
    67.            
    68.                                 [1] => Array
    69.                                 (
    70.                                     [id] => 11
    71.                                     [id_parent] => 4
    72.                                     [name] => Учредители
    73.                                     [type] => 1
    74.                                     [lang] => 1
    75.                                 )
    76.                         )
    77.                      
    78.         )
    79.         [3] => Array
    80.         (
    81.             [id] => 5
    82.             [id_parent] => 0
    83.             [name] => Контакты
    84.             [type] => 1
    85.             [lang] => 1
    86.         )
    87.  
    88. )
    Притом база может быть любого уровня вложенности. Помогите, не могу сделать...
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Re: Помогите создать функцию наполнения сложного массива из

    Рекурсия, сын мой, помочь должна, я думаю.
     
  3. lecherg

    lecherg Новичок

    С нами с:
    30 апр 2014
    Сообщения:
    2
    Симпатии:
    0
    Re: Помогите создать функцию наполнения сложного массива из

    Да не получается в рекурсии сделать массив такой вложенности, внимательно посмотрите вопрос! Нет в php обращения к динамическому уровню массива!
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Re: Помогите создать функцию наполнения сложного массива из

    К чему чему нет обращения?
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Re: Помогите создать функцию наполнения сложного массива из

    lecherg
    Почитай вот эту темку: viewtopic.php?f=13&t=38474&p=313678 . Там задача точь-в-точь, как у тебя, только начальные данные берутся не из базы, а просто из файла. Там в предпоследнем сообщении есть решение задачи. Есть два решения даже - и отображение меню с отступами в html и создание многомерного массива. Тебе, соответственно, второй код.

    Добавлено спустя 55 секунд:
    Re: Помогите создать функцию наполнения сложного массива из БД
    И да, это делается рекурсией.