За последние 24 часа нас посетили 18129 программистов и 1613 роботов. Сейчас ищут 1880 программистов ...

Алгоритм вывода дерева

Тема в разделе "Решения, алгоритмы", создана пользователем antonn, 19 янв 2008.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Посоветуйте, как с наименьшими затратами вывести дерево?
    есть массив, каждый элемент которого имеет структуру в 3 поля - ID, Parent, Name.
    ID - уникальный нумер
    Parent - родительский элемент (ИД родительского элемента)
    Name - имя, текст :)

    элементы с id=0 находятся в корне дерева. Как вывести их деревом?
     
  2. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    вообще было бы классно на выходе получить массив, в котором ветви дерева были бы вложенными массивами :)
     
  3. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Ну вот на днях написал

    PHP:
    1.  
    2. <?
    3. function ttree($DB, $pid, $level){
    4.     global $menu;
    5.     global $level;
    6.     $level++;
    7.     $sql="select * from table where pid='.$pid.' order by id";
    8.     $res=$DB->select($sql);
    9.   if ($res){
    10.     foreach($res as $row){
    11.         $row['level']=$level;
    12.         $menu[]=$row;
    13.         ttree($DB, $row['id'], $level);
    14.         $level--;
    15.     }
    16.   }
    17.   return $menu;
    18. }
    19.  
    20. $res=ttree($DB, 0, 0);
    21. if ($res){
    22.     foreach($res as $row){
    23.     echo '<div>'.str_repeat('&nbsp;', $row['level']).$row['title'].'</div>';
    24.     }
    25. }
    26. ?>
    27.  
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  5. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    пасиба :)