|
|
|
|
|
для: mihdan
(29.04.2007 в 14:58)
| | допустим мы считали всю таблицу в массив $arr;
в виде $arr[0]['cid'] = '...';$arr[0]['pid'] = '...'; ...
$arr[0]['cid'] = 1;
$arr[0]['pid'] = 0;
$arr[0]['name'] = "Категория 1";
// 1. в массиве $arr содержатся только связи потомок -> родитель
// а этого не достаточно для рекурсии
// нужно сделать из массива $arr в массив другого вида
// $arrn[0] содержит массив из потомков категории с номером 0 (корень)
// $arrn[1] - // - с номером 1 и т.д.
foreach ($arr as $v)
{
$arrn[$v['pid']][] = $v;
}
// теперь можно делать ф-цию
// здесь $pid - номер категории
// $level - уровень вложенности
function createOut_r(&$arr,&$arrn,$pid,$level)
{
$out = "";
// цикл по подкатегориям
// без второго массива это сделать сложно
foreach ($arrn[$pid] as $v)
{
// отступ
for ($i=0;$i<$level;$i++)
{
$out .= " ";
}
// имя категории
$out .= $v['name'];
// проверяем - есть ли в категории подкатегории
// без второго массива это сделать сложно
if ($arrn[$v['cid']])
{
$out .= createOut_r($arr,$arrn,$v['cid'],$level+1);
}
}
return $out;
}
// вызываем ф-цию:
$res = createOut_r($arr,$arrn,0,0);
echo $res;
|
сорри за ошибки, я скрипт не проверял. | |
|
|
|
|
|
|
| Есть таблица в БД, отвечающая за структуру каталогов и подкаталогов catalogs
нужно эту структуру распечатать так
Каталог 1
подкаталог 1
подкаталог 2
подкаталог 3
Каталог 2
подкаталог 1
подкаталог 1.1
подкаталог 1.2
подкаталог 2
подкаталог 2
Каталог 3
т.е. со сдвигом вправо. я запарился с рекурсией не могу написать никак функцию.
CREATE TABLE `catalogs` (
`cid` int(10) unsigned NOT NULL auto_increment,
`pid` int(11) NOT NULL default '0',
`name` text NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=MyISAM COMMENT='Структура каталогов' AUTO_INCREMENT=13 ;
INSERT INTO `catalogs` (`cid`, `pid`, `name`, `description`) VALUES
(1, 0, 'первый каталог1', 'описание каталога1'),
(2, 0, 'уцуа', 'цуацуа'),
(3, 1, 'цуацуа', 'цуацуацу'),
(5, 1, 'в', 'в'),
(6, 1, 'сывс', 'ывсыв'),
(7, 2, 'цццццццццц', 'цццццццццццц'),
(8, 0, 'вывфы', 'wewrwe'),
(9, 0, 'вывфы', 'qqqsdfer'),
(10, 0, 'вывфы', ''),
(11, 0, 'вывфы', ''),
(12, 0, 'цувцувцув', '');
|
cid - идентификатор каталога
pid - идентификатор родителя для каталога
name - имя каталога
description - описание каталога | |
|
|
| |
|