![]() |
Модераторы: 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 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |