Организация динамического вложенного меню

max_danilove

Новичок
Организация динамического вложенного меню

Помогите написать код (или алгоритм) для реализация динамического меню, т.е. вложений. Например как в модулях различных CMS, на примере модуля Софт-архива, там можно создавать много вложенных меню, например
Главное
>раздел1
>>подраздел1
>>подраздел2
>>>разделы
>>>разделы
>раздел2
>подраздел1
>>разделы

Как это реализовать, только условие, что все имена разделов находятся в базе данных. Смотрел структуру модулей аналогичных у ПХП-нюк, там структура такая: id, name, parent_id. id- уникальный номер раздела, name - его имя, а parent_id - это id связки с родителем. например:

1 А 0
2 Б 1
3 В 2
4 Г 3
5 Д 0
6 Е 0
7 Ж 6

Получается такое меню:
А - Б - В - Г
Д
Е - Ж

Помогите пожалуйста


:confused:
 

BlackSabbath

Новичок
Вы же сами уже описали структуру данных. Или Вам непонятен алгоритм работы с этой структурой?
В таком случае наводящий вопрос - Вам слово рекурсия знакомо?
 

max_danilove

Новичок
конечно знакомо, но не могу реализовать программно. Можете помочь?
Не могу понять сам алгоритм работы этой структуры, да и реализовать ее рекурсивно мне будет сложновато...
 

ilkz

Новичок
PHP:
function printArray($array){
	if(is_array($array))
	foreach($array as $key => $val){
		if(is_array($val))  printArray($array[$key]);
			else  echo $val."\n";
		}
		else echo $array;
	}
Рекурсивно выводит n-мерный массив. Пожалуй, простейший вариант. Разбирайся.
 

max_danilove

Новичок
Всем спасибо, реализацию рекурсии сделал двумя функциями, одна их них возвращает кол-во дочерних потомков, чтобы рекурсию остановить в нужный момент. Все спасибо
 

HraKK

Мудак
Команда форума
ммм
Рекурсия остановит сама себя как только не будет дочерних элементов, почитай еще или лучше подумай
-------------------------------
if(is_array($array))
---------------------------------
например с выше написанного текста эта строчка остоновит рекурсию когда не будет дочернего елемента
 

max_danilove

Новичок
Автор оригинала: HraKK
ммм
Рекурсия остановит сама себя как только не будет дочерних элементов, почитай еще или лучше подумай
-------------------------------
if(is_array($array))
---------------------------------
например с выше написанного текста эта строчка остоновит рекурсию когда не будет дочернего елемента
Я не пользовался приведенным выше примером, пока ждал ответа думал...
PHP:
function SubMenu($pid)
{
        ...
        return sql_numrows($query);
}
function CreateMenu($cid,$name,$h)
{

        if(SubMenu($cid))
        {
         ...
        }

}
В последнем сообщении сказал что одна из функций является остановкой (условием окончания) рекурсии - это SubMenu. Без нее рекурсия не остановится, а ровно как ты и сказал - она завершиться когда не будет дочернего элемента, я об этом и говорил, может не так выразился или не так поняли... тема себя исчерпала
 
Сверху