Наверх

Иерархическое дерево на php

Достаточно часто есть необходимость рекурсивно обойти таблицу данных и построить рекурсивное(или иерархическое) дерево на php.
Рассмотрим простейший пример вызова рекурсивной функции и построения иерархического дерева.
Создаем таблицу и дампим данные

CREATE TABLE IF NOT EXISTS `tree` (
 `id` int(100) NOT NULL AUTO_INCREMENT,
 `parent_id` int(100) NOT NULL,
 `title` varchar(100) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF-8 AUTO_INCREMENT=11 ;
 
--
-- Дамп данных таблицы `tree`
--
 
INSERT INTO `tree` (`id`, `parent_id`, `title`) VALUES
(1, 0, 'первый'),
(2, 0, 'второй'),
(3, 0, 'третий'),
(4, 2, 'во втором'),
(5, 2, 'во втором1'),
(6, 2, 'во втором2'),
(7, 2, 'во втором3'),
(8, 3, 'подпункт'),
(9, 6, 'подпункт2'),
(10, 6, 'подпункт3');

Делаем один единственный запрос.

$result=mysql_query("SELECT id, parent_id, title FROM tree");
$cats = array();
while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function  build_tree($cats,$parent_id){
if(is_array($cats) and count($cats[$parent_id])>0){
$tree = '<ul>';
 foreach($cats[$parent_id] as $cat){
  $tree .= '<li>'.$cat['title'];
 $tree .=  build_tree($cats,$cat['id']);
  $tree .= '</li>';         
 }
 $tree .= '</ul>';
  } 
  else return null;          
  return $tree; 
}
echo build_tree($cats,0); // :)))


 Читайте также:


5 комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
By Гость
5 недель 3 дня назад

Запись не моя, я просто

Запись не моя, я просто разместил коммент.
By Гость
12 недель 3 дня назад

Так сделаем же это общими

Так сделаем же это общими усилиями! Поддержим тему! :)
By Pavel Zagor
14 недель 2 дня назад

Однозначно стоит поддержать

Однозначно стоит поддержать эту запись комментариями =)
By Гость
30 недель 2 дня назад

Однозначно напишу

Однозначно напишу комментарий, отличная запись.
By Гость
1 неделя 4 дня назад

Скорее нужно поддержать эту

Скорее нужно поддержать эту запись комментариями, правда ведь?

Отправить комментарий

Войти используя Loginza Vkontakte Facebook livejournal Google Account Yandex Mail.ru API Rambler Last.fm Twitter WebMoney
  • Строки и параграфы переносятся автоматически.
  • Доступные HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Подробнее о форматировании

три - ноль =
Решите этот математический пример.Решение введите цифрой.Например для "один * четыре=?" введите "4"