Разное
- Главная
- Шаблоны сайта
- Книги
- Фон для сайта
- Анимированные картинки
- Партнерские программы
- Лохотроны и кидалово в интернете

Скрипты

Php скрипты:
-Форумы,
-Портальные системы / CMS,
-Чаты,
-Доски объявлений,
-  Голосования
-Гостевые книги,
-FAQ системы,
-  Новости,
-Ссылки и каталоги ссылок
-Электронная почта,
-Электронная коммерция,
-Поиск,
-Файловые менеджеры.
JavaScript скрипты:
-Графика,
- Защита,
-Навигация,
-Текстовые эффекты,
-Часы и кaлендари.

Статьи
web-мастеру:
-Продвижение сайтов,SEO,
-Юзабилити,
-Поисковые системы,
- CMS (Системы управления сайтом),
-Apache,
-.htaccess,
-Mod_rewrite,
-Хостинг.
web
-PHP
-Perl
-ASP,
-SSI
-Javascript
-AJAX
-Java,
-Python
-ASP.NET
-Ruby on Rails.
Базы данных:
-MySQL,
-SQL,
SQLite
-PostrgeSQL
-Oracle
-MS SQL.
Языки разметки:
-HTML/xHTML
-CSS
-DHTML,
-WAP/WML,
-XML,
-RSS.
Интернет:
-Безопасность,
-Протоколы,
 -Интернет и Закон.


 
Вывод дерева в MySQL.

Вывод дерева в MySQL.

Данная тема уже заезжена до протертых шин, но все таки какой программист с этим не сталкивался. Я лишь покажу один пример, основанный на базе, рекурсия с выполнением каждого раза запроса может оказаться ненароком очень долгой, поэтому сначала забросим все данные одним запросом в массив, а рекурсией будем пробегаться по нему.


Понеслася.


Определимся с чем будем иметь дело. Примерная табла будет содержать как минимум 3 столбца.


CREATE TABLE Tree (
`
ID` INT NOT NULL AUTO_INCREMENT,
`
ParentID` INT NOT NULL,
`
Title` VARCHAR(255) NOT NULL,
PRIMARY KEY(`ID`)
)


Ну и что нам теперь делать? Осталось написать скрипт который бы обработал эту таблицу и вывел дерево на экран. Как и было сказано, для начала надо выполнить запрос на всю базу.


SELECT ID, ParentID, Title FROM Tree;


Результат собираем следующим образом. Если вы представляете себе двухмерный массив то без труда поймете следующий код.


while($row = mysql_fetch_assoc($res)){
$tree[$row['ParentID']][$row['ID']] = $row['Title'];
}


Чтобы посмотреть что же лежит в массиве можно просто выполнить print_r($tree) и будет вам счастье! Для чего я заделал $row['ID'] на второй уровень? Для связи с ParentID, действуем таже как если бы мы просто выполняли запросы в рекурсии, но мы же орудуем массивами...


function ShowTree($tree, $pid=0){
echo
"<ul type='square'>";
foreach(
$tree as $id=>$root){
if(
$pid!=$id)continue;
if(
count($root)){
foreach(
$root as $key => $title){
echo
"<li>{$title}";
if(
count($tree[$key]))ShowTree($tree,$key);
}
}
}
echo
"</ul>";
}




Step By Step


Я пробегаюсь по всему Parent дереву. Если помните то в $root будет содержаться массив с содержимым всех полей с этим ParentID. Чтобы не повторится с выводом полей сделаем затычку $pid!=$id для следующего вызова рекурсии. Осталось лишь пробежаться по содержимому, для чего запускаем второй foreach. Немного отступлюсь. чтобы не было недоразумений, типа а чего скрипт ругается на foreach, прямо перед ним делаю проверку на количество содержимого массива. Естественно, foreach обрабатывает массив и к тому же не "нулевый"!


Возвращаемся.


Именно во втором цикле надо вызывать рекурсию, для чего сначала проверим , а есть ли потомки с таким родителем.


if(count($tree[$key]))ShowTree($tree,$key);


В принципе вот и все. Согласитесь что несложно, а времени скрипта экономится , дай БожЕ. И применений куча.


Назад
Автор: md5hash
Источник: realcoding.net





 
Реклама


Реклама

Рейтинги

Яндекс цитирования
Анти-Бан Яндекса для сайта www.webmas.ru