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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 15:40   #1
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
Злость как построить дерево ?

есть массив
Код:
Array
(
[17] => Array
(
[id_theme] => 17
[Name] => Общая
[Ownerid] => 

)

[18] => Array
(
[id_theme] => 18
[Name] => синий
[Ownerid] => 17

)

[19] => Array
(
[id_theme] => 19
[Name] => зеленый
[Ownerid] => 18

)

[20] => Array
(
[id_theme] => 20
[Name] => красный
[Ownerid] => 19

)
...само собой здесь укоротил и массив и элементы массива но суть в том что Ownerid указывает на родительский элемент а id_theme или индекс массива соответственно индекс, вложенность естественно не ограниченная как из него построить вложенный список option и optgroup для элемента select вот такой (http://htmlbook.ru/html/optgroup)
п с сгуглил все, ну не знаю я как это сделать и все (
чайник юзеру не товарищ, а сам себе враг...

Последний раз редактировалось Аlex; 11.02.2014 в 12:38. Причина: пунктуация
Аlex вне форума Ответить с цитированием
Старый 10.02.2014, 19:09   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Создание древовидного списка из массива
Немного доработать – вместо списка сделать <select>, но принцип вполне понятен.
Andkorol вне форума Ответить с цитированием
Старый 10.02.2014, 20:08   #3
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
Вопрос

спасибо, но как это сделать перебором для ограниченной вложенности это просто и понятно. Но проблема в том что не знаю как эту функцию преобразовать в рекурсивную, чтобы каждый узел мог быть как родителем так и дочерним.
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 10.02.2014, 20:50   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Накалякал тут на скорую руку..дальше сами разбирайтесь.
PHP код:
<?
function draw_tree($a) {
    if (!
is_array($a)) echo '<li>' $a '</li>';
    else {
        foreach(
$a as $k => $v) {
            echo 
$k '<ul>';
            
draw_tree($v);
            echo 
'</ul>';
        }
    }
}
$a = array('a' => 'asfdasf''b' => array('c' => '1''d' => 2));
draw_tree($a);

Последний раз редактировалось Кольша; 10.02.2014 в 20:53.
Кольша вне форума Ответить с цитированием
Старый 11.02.2014, 10:58   #5
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

эх это тоже не то ((
я так понял это вывод многомерного массива в многоуровневый список а у меня задача состоит в поиске алгоритма построения иерархического дерева.
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 11.02.2014, 11:02   #6
buriat
Форумчанин
 
Регистрация: 28.06.2010
Сообщений: 189
По умолчанию

Перед тем как вывести, тебе надо переделать твой массив в многомерный. Иначе никак.
buriat вне форума Ответить с цитированием
Старый 11.02.2014, 11:18   #7
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

это почему же это нельзя построить дерево из одномерного массива ? я например видел много примеров как это сделать если тот же одномерный массив лежит в БД ..
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 11.02.2014, 11:19   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Заинтересовал, щас накидаю пример.
Кольша вне форума Ответить с цитированием
Старый 11.02.2014, 11:35   #9
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

PHP код:
$items = array(Array('id_theme' => 17'Name' => 'Общая''Ownerid' => ''),
Array(
'id_theme' => 18'Name' => 'синий''Context' => 'cisco''Ownerid' => 17),
Array(
'id_theme' => 19'Name' => 'зеленый''Ownerid' => 18),
 Array(
'id_theme' => 20'Name' => 'красный''Ownerid' => 19));
 function 
dt($a,$id){
    foreach(
$a as $item){
    if (
$id==''or $item['Ownerid']==$id){
    echo 
$item['Name'].'<ul>';
    
dt($a,$item['id_theme']);
    echo 
'</ul>';
    }
    }

}
dt($items,''); 
Не совсем точно конечно, но все же.
Кольша вне форума Ответить с цитированием
Старый 11.02.2014, 11:41   #10
buriat
Форумчанин
 
Регистрация: 28.06.2010
Сообщений: 189
По умолчанию

Цитата:
Сообщение от Аlex Посмотреть сообщение
это почему же это нельзя построить дерево из одномерного массива ? я например видел много примеров как это сделать если тот же одномерный массив лежит в БД ..
У тебя есть одномерный массив - из него надо сделать многомерный массив-дерево.
После этого легко можно создат select список на странице. Пока не переделаешь массив - select нормально создать не получится.
buriat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить дерево из JSON/XML Человек_Борща JavaScript, Ajax 3 22.11.2013 15:47
C++ Построить и реализовать унарное дерево Sauber584 Помощь студентам 1 28.10.2010 00:27
Построить дерево в VirtualDrawTree ikot Компоненты Delphi 1 17.10.2009 01:08
построить дерево,помогие пожалуйста olesyaA Помощь студентам 13 30.05.2009 19:41
Построить дерево в ширину JET_FLASH Помощь студентам 3 06.02.2008 08:18