![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Igor_K |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Всем привет!
У меня возникли трудности с составлением дерева. Не могу сообразить, ума не хватает :((( Есть массив:
где внутренние массивы имеют вид array(идентификатор, родитель, значение) нужно его преобразовать в массив такого вида:
то есть создать такое от дерево. Только ума не хватает, подскажите пожалуйста! ![]() |
||||
|
|||||
GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: 8 Всего: 32 |
Igor_K, тебе нужна функция, которая бы принимала 1й вариант и возвращала второй?
-------------------- ![]() ![]() |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
GZep, можно и функцию, можно и на словах обьяснить.
![]() |
|||
|
||||
almagnit |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 3.4.2008 Репутация: нет Всего: 7 |
Если с операторами РНР у Вас все в порядке, тогда используте алгоритм:
1. Нужно узнать сколько нужно различных массивов для построения дерева, в Вашем случае нужно четыре массива на это указывают их номера "0,1,2,3" в значениях массива arr. 2. Создаем массив с требуемым количеством элементов, либо нужное количество отдельных массивов и присваиваем его n-ой ячейке, либо n-му массиву - элементы массива arr с соответствующими значениями, т.е. в нулевую ячейку, либо в нулевой массив мы добавляем строку 'Элемент №1' и т.д. 3. Формируем массив aarr из полученного промежуточного массива или массивов |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Вообще-то нужен всего 1 массив. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Igor_K |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
almagnit, спасибо большое!!!
![]()
Только от с этим не очень понял. Допустим получил 4 массива, как их соединить правильно? То есть поместить в нужную позицию. Например, от, получил:
|
||||
|
|||||
GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: 8 Всего: 32 |
Igor_K, что-то мне подсказывает, что для решения вопроса нужно увидеть причину для такой сортировки массива. Может на конкретном примере? (вероятно, может получиться более простой способ решения реальной проблемы).
-------------------- ![]() ![]() |
|||
|
||||
skyboy |
|
||||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
в каждом элементе объяви ещё один элемент массива - типа, children(к примеру).
тогда будет проще собрать дерево:
после сей операции у тебя получится не совсем то, что ты описал(из-за дополнительных элементов), но по полученной структуре пройтись вполне можно будет. ещё я бы сделал ассоциативный массив(id, parent, name, chidren), а то обращение
понятнее, чем
вот пример вывода:
|
||||||||
|
|||||||||
SelenIT |
|
||||||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Имхо, для исходной задачи так немного нагляднее:
Лучше всего сделать этот массив ассоциативным:
Тогда из самого массива сразу станет ясно, что к чему привязывать ![]() skyboy, в первом примере круто повезло, что айдишники идут по порядку, начиная с единицы;) Это сообщение отредактировал(а) SelenIT - 17.4.2008, 00:31 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
полный вариант: "круто повезло, что индекс в массиве совпадает со значением id - 1" ;) етественно, лучше было бы, если бы индексом элемента в начальном массиве был бы сам id. тогда бы и единицу не прилось бы вычитать. и если бы элементы юыли бы ассоциативным массивом, было бы удобнее и т.д.. |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Да, именно это я имел в виду ![]() -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
чтоб не париться, можно положить, что исходный массив может быть только таким и модификацию производить собственными силами:
все же, как мне кажется, сортировка в решении будет лишней. у нас и так для ассоциативного массива хеш строится... P.S. Да, мой код похож на код SelenIT'a, но, чесное слово, не плагиатил, а доработал ![]() |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Да, вариант с хешем однозначно лучше ![]() ![]() -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Спасибо большое!!!!!
![]() Щяс буду пробовать ваши варианты. ![]() |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
||||
|
||||
DeamonShan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: 3 Всего: 6 |
в случае если из БД берется... Это сообщение отредактировал(а) DeamonShan - 17.4.2008, 18:07 |
|||
|
||||
DeamonShan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: 3 Всего: 6 |
не тестировал...
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Общий принцип примерно такой (вся соль в строке 22;). В том примере дерево строится рекурсивной ф-цией, но можно применить подход skyboyя со ссылками... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
SelenIT, Спасибо за помощь!!! Разобрался.
![]() DeamonShan, тоже спасибо, но имхо в каждой итерации делать запрос в базу данныых не хочется ;) |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Добавьте кто-то всем отписавшимся тут плюсики, у меня постов не хватает
![]() спасибо! |
|||
|
||||
fics |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 21.2.2008 Где: Луганск Репутация: нет Всего: нет |
Да, из базы данных. а как ее получить в таком виде? сразу из базы и стройте, что никто рекурсией пользоваться не умеет?
кусочек из одного моего класса. $node["level"] - дополнительное поля уровня вложенности сразу в сессию пишу чтобы не ганять такой тяжелый скрипт
--------------------
Ушел на пары |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
fics, такой подход не очень. 100 вложений - 100 запросов.
Опять я вернулся к этому вопросу. Тему создал по этому поводу получения данных из таблицы http://forum.vingrad.ru/forum/topic-257734.html Вернулся к этому вопросу спустя год, не довел тогда роботу до конца. |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
нечего страшного. можно же запускать кроном отдельный скрипт и писать результат в файл который потом будет линковаться к сайту. -------------------- Amazing ![]() |
|||
|
||||
LittleFuntik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.8.2007 Где: Украина, Чернигов Репутация: нет Всего: нет |
Вот держи мое решение, Спецыятельно для твоего случая!!!
И всего-лишь ОДИН ЗАПРОС к БД Это сообщение отредактировал(а) MoLeX - 16.6.2009, 05:51 |
|||
|
||||
capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Недавно как раз работал с деревом каталога. Из всех вариантов выбрал, как считаю, самый оптимальный.
"Дерево каталогов NESTED SETS (вложенные множества) и управление им " http://www.getinfo.ru/article610.html Все остальные варианты хороши на маленьких объёмах. При польших объёмах, скрипты еле ворочаются. |
|||
|
||||
deperoff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2011 Репутация: нет Всего: нет |
Вот оно)) |
|||
|
||||
xPchelkiNx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.8.2012 Репутация: нет Всего: нет |
||||
|
||||
Genn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 7.12.2007 Где: Тамбов Репутация: нет Всего: нет |
эта структура таблицы легко реализуется
id id_parent name потом foreach и всех делов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |