Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2016, 17:55   #1
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию Преобразовать линейный массив в иерархический массив (с вложенными подмассивами)

Добрый день.

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

значит так, дано: обычный массив, в котором указан родительский элемент.
на PHP это упрощённо выглядит так:
PHP код:
$stru2 = [
'0' => [
       
'sort' => 2,
       
'parent_id' => 0,
       
'name' => "Папка 1",
       
'is_folder' => 1],

'1' => [
       
'sort' => 3,
       
'parent_id' => 2,
       
'name' => "Файл 1",
       
'is_folder' => ],

'2' => [
        
'sort' => 4,
        
'parent_id' => 2,
        
'name' => "Файл второй",
        
'is_folder' => 0],

'3' => [
        
'sort' => 5,
        
'parent_id' => 2,
        
'name' => "Подпапка 2",
        
'is_folder' => 1],

'4' => [
        
'sort' => 6,
        
'parent_id' => 5,
        
'name' => "Файл XXX",
        
'is_folder' => 0],

'5' => [
        
'sort' => 7,
        
'parent_id' => 5,
        
'name' => "Файл YYY",
        
'is_folder' => 0],

'6' => [
        
'sort' => 8,
        
'parent_id' => 0,
        
'name' => "Файл rootовый",
        
'is_folder' => 0],

]; 
Задача такая - получить массив, в котором вложенные элементы являются подмассивом в родительском элементе.
В примере это ключ 'data'
Т.е. нужно получить:
PHP код:
$result=[
[
'id'=>2'value'=>"Папка 1",
  
'data'=>[
    [
'id'=>3'value'=>"Файл 1"],
    [
'id'=>4'value'=>"Файл второй"],
    [
'id'=>5'value'=>"Подпапка 2",
    
'data'=>[
        [
'id'=>6'value'=>"Файл XXX"],
        [
'id'=>7'value'=>"Файл YYY"]
    ]
    ],
  ]],
  [
'id'=>8'value'=>"Файл rootовый"]
]; 
Разумеется, я прошу не готовый код - прошу идею/алгоритм/подсказку - как в цикле мне можно организовать такое преобразование, чтобы получить такую вложенность?
Пните меня, пожалуйста в нужную сторону.

Заранее благодарю всех, кто проникся моей проблемой!

p.s. разумеется, вложенность не ограничена.
p.p.s. на то, что в структуре якобы папки и файлы внимания не обращайте, это просто тестовый пример, в реале к ФС задача отношения не имеет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.02.2016, 18:20   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тут что-то похожее http://stackoverflow.com/a/7731294/964478
Только там id это ключи в самом массиве, а не в свойстве sort.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.02.2016, 18:35   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

http://stackoverflow.com/questions/4...rom-array-list
http://stackoverflow.com/questions/8...t-array-in-php
Andkorol вне форума Ответить с цитированием
Старый 17.02.2016, 18:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Alex11223, Andkorol, спасибо огромное за ссылочки.
Сейчас буду пилить код под себя.
Думаю, что тему можно уже закрывать!

p.s. странно, что достаточно очевидное решение через рекурсию сразу не пришло мне в голову!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать массив строк в массив чисел на C#? orfos Помощь студентам 4 03.10.2014 15:56
задача на линейный массив Тишуня Паскаль, Turbo Pascal, PascalABC.NET 5 13.03.2014 22:20
assembler. Задан массив А из N чисел. Преобразовать этот массив так, чтобы сначала шли четные числа, а потом – нечетные Transcend Помощь студентам 5 18.03.2013 11:42
Линейный массив Саня_ Общие вопросы Delphi 4 22.01.2012 10:13