Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: tree
 
 автор: todas   (27.12.2005 в 13:05)   письмо автору
 
 

ok, а как мне вывести эти данные:





id nam pid
----------
1  ass   0
2  loop  1
3  zxx   0
4  flip  2 



в такую структуру:
вернее, как вывести подкатегории в таком виде?


ass 
    loop
          flip
zxx 

   
 
 автор: P@Sol   (27.12.2005 в 13:17)   письмо автору
 
   для: todas   (27.12.2005 в 13:05)
 

если вы написали все то что у вас есть, то никак,но можно
1.вывести

ass 
    loop
zxx
        flip

2. сделать еще столбец - к какой папке относиться

id nam pid pid2
----------------- 
1  ass   0   1
2  loop  1   1
3  zxx   0    2
4  flip  2    1

   
 
 автор: Todas   (27.12.2005 в 13:23)   письмо автору
 
   для: P@Sol   (27.12.2005 в 13:17)
 

Почему же нельзя?
ass и zxx - категории, а loop подкатегория ass, а flip подкатегория loop!
Так вот я хотел штоб мне помогли написать функцию вывода такой структупы.

   
 
 автор: Loki   (27.12.2005 в 13:29)   письмо автору
 
   для: Todas   (27.12.2005 в 13:23)
 

А из чего следует такая структура? Чтобы определить принадлежность к какой-то ветви в любом случае надо воодить дополнительное поле в котором будет либо идентификатор группы, либо номер родителя.

   
 
 автор: P@Sol   (27.12.2005 в 14:01)   письмо автору
 
   для: Todas   (27.12.2005 в 13:23)
 

потому что у вас не указано, что flip это подкатегория loop. Как php об этом узнает?????

   
 
 автор: Todas   (27.12.2005 в 15:39)   письмо автору
 
   для: P@Sol   (27.12.2005 в 14:01)
 

P@sol Вот pid равен id, я выделил их жирным.
1 ass 0
2 loop 1
3 zxx 0
4 flip 2
если я, что делаю не правилдьно, то подскажите как надо.

   
 
 автор: P@Sol   (27.12.2005 в 16:04)   письмо автору
 
   для: Todas   (27.12.2005 в 15:39)
 

а если будет
5 klop 3, то что это будет

ass 
    loop 
          flip 
zxx 
     klop

???

   
 
 автор: Loki   (27.12.2005 в 16:36)   письмо автору
 
   для: Todas   (27.12.2005 в 15:39)
 

Теперь дошло:) тогда очень просто: создаем функцию, которая выводит строчку, выбирает следующую, увеличивает размер отступа и вызывает сама себя рекурсивно. Собственно, именно такая схема работает на этом форуме, так что можете посмотреть его исходинки в разделе downloads.

   
 
 автор: Киналь   (27.12.2005 в 16:13)   письмо автору
 
   для: todas   (27.12.2005 в 13:05)
 

Алгоритм такой.

1) Берем первую запись, у которой pid=0, и узнаем ее id.
2) Ищем первую запись. у которой pid=id_из_пункта_1.
3) Погвторяем пункт (2) для последующих уровней (pid следующего уровня равен id предыдущего), пока будут подходящие записи (число записей с нужным pid отлично от нуля).
4) см. п.2, но не с первой. а второй записью.
5) Зацикливаем пп. 2-4.

   
 
 автор: Todas   (29.12.2005 в 13:34)   письмо автору
 
   для: Киналь   (27.12.2005 в 16:13)
 

Ага, вот так наверное...

<?
    
include "config.php";
    function 
tree($ids) {
    
$query "SELECT id, nam, pid FROM catalog WHERE pid = " $ids " ORDER BY id ASC";
    
$result mysql_query($query);
    echo 
"<ul>";
    while ( 
$print mysql_fetch_array($result)) {
    
$ide $print['id'];
    echo 
"<li>";
    echo 
"<a href=#?id=".$ide.">".$print['nam']."</a>";
    
tree($ide);
    }
    echo 
"</ul>";
    }
    
tree(00);
?> 

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования