Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод древовидной структуры из БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите с реализацией условия
Saymor
Отправлено: 07 Июля, 2011 - 09:34:15
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




данные в БД
| id |-----| parent |----------| Name |
+--+----+--------+---------+--------+
| 1 |-----| 0 |-----------------| Родитель 1 |
| 2 |-----| 0 |-----------------| Родитель 2 |
| 3 |-----| 0 |-----------------| Родитель 3 |
| 4 |-----| 0 |-----------------| Родитель 4 |
| 5 |-----| 0 |-----------------| Родитель 5 |
| 6 |-----| 0 |-----------------| Родитель 6 |
|11|-----| 1 |-----------------| Потомок 1.1 |
|12|-----| 1 |-----------------| Потомок 1.2 |
|13|-----| 2 |-----------------| Потомок 1.1 |
|14|-----|13|-----------------| Потомок 1.1.1 |
|15|-----|13|-----------------| Потомок 1.1.2 |

Запрос к БД:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $query = "SELECT id,p_name,parent FROM category WHERE type = 'category' ORDER BY ordering ASC";

PHP:
скопировать код в буфер обмена
  1. <? echo "<pre>"; print_r($query); echo "</pre>"; ?>


результат, имеем массив в таком виде:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => stdClass Object
  3.         (
  4.             [id] => 1
  5.             [name] => Родитель 1
  6.             [parent] => 0
  7.         )
  8.  
  9.     [1] => stdClass Object
  10.         (
  11.             [id] => 14
  12.             [name] => Потомок 1.1.1
  13.             [parent] => 13
  14.         )
  15.  
  16.     [2] => stdClass Object
  17.         (
  18.             [id] => 13
  19.             [name] => Потомок 1.1
  20.             [parent] => 2
  21.         )
  22.  
  23.     [3] => stdClass Object
  24.         (
  25.             [id] => 11
  26.             [name] => Потомок 1.1
  27.             [parent] => 1
  28.         )
  29.  
  30.     [4] => stdClass Object
  31.         (
  32.             [id] => 12
  33.             [name] => Потомок 1.2
  34.             [parent] => 1
  35.         )
  36.  
  37.     [5] => stdClass Object
  38.         (
  39.             [id] => 15
  40.             [name] => Потомок 1.1.2
  41.             [parent] => 13
  42.         )
  43.  
  44.     [6] => stdClass Object
  45.         (
  46.             [id] => 2
  47.             [name] => Родитель 2
  48.             [parent] => 0
  49.         )
  50.  
  51.     [7] => stdClass Object
  52.         (
  53.             [id] => 3
  54.             [name] => Родитель 3
  55.             [parent] => 0
  56.         )
  57.  
  58.     [8] => stdClass Object
  59.         (
  60.             [id] => 4
  61.             [name] => Родитель 4
  62.             [parent] => 0
  63.         )
  64.  
  65.     [9] => stdClass Object
  66.         (
  67.             [id] => 5
  68.             [name] => Родитель 5
  69.             [parent] => 0
  70.         )
  71.  
  72.     [10] => stdClass Object
  73.         (
  74.             [id] => 6
  75.             [name] => Родитель 6
  76.             [parent] => 0
  77.         )
  78.  
  79. )


далее вывожу так:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $tree = array();
  4. for($i=0,$n=count($cats); $i<$n; $i++){
  5.  $cat = $cats[$i];
  6.  
  7.        if(empty($tree[$cat->parent]))
  8.              $tree[$cat->parent]=array();
  9.            $tree[$cat->parent][]=$cat;
  10. }
  11.  
  12. ShowCategory($tree);
  13.  
  14.  
  15. function ShowCategory(&$tree,$k_parent=0){
  16.     if(empty($tree[$k_parent])) return;
  17.  
  18.     echo $k_parent ? "<ul style='display:none;'>" : "<ul>";
  19.     for($i=0,$n=count($tree[$k_parent]); $i<$n; $i++){
  20.  
  21.        echo "<li>";
  22.        if(??????=Здесь должно быть условие=????????){
  23.             echo "<span>".$tree[$k_parent][$i]->p_name."</span>";
  24.        }else{
  25.             echo "<a href='index2.php?category=".$tree[$k_parent][$i]->id."'>".$tree[$k_parent][$i]->p_name."</a>";
  26.        }
  27.  
  28.         ShowCategory($tree, $tree[$k_parent][$i]->id);
  29.         echo "</li>";
  30.     }
  31.     echo $k_parent ? "</ul>" : "";
  32. }
  33. ?>


а суть условия такова: надо сделать самого последнего потомка ссылкой.
помогите добрым советом?

(Отредактировано автором: 07 Июля, 2011 - 09:34:44)

 
 Top
Slavenin
Отправлено: 07 Июля, 2011 - 10:27:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




возможно

(Отредактировано автором: 07 Июля, 2011 - 10:30:10)

 
 Top
Saymor
Отправлено: 07 Июля, 2011 - 12:06:10
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Slavenin пишет:
возможно


Нет, к сожалению не работает.. Огорчение
(Добавление)
или подскажите как сделать вывод того же самого, но без рекурсии?

(Отредактировано автором: 07 Июля, 2011 - 12:06:31)

 
 Top
Slavenin
Отправлено: 07 Июля, 2011 - 16:59:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB