[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Строка отображающая дерево
arc-one
id_req | id_parent_req | prev | name
1 | 0 | 1 | name1
2 | 1 | 2 | name2
3 | 1 | 1 | name3
4 | 3 | 1 | name4
5 | 3 | 2 | name5



Есть таблица "sys_requests" - в ней хранится дерево, в "prev" хранится нужный порядок. Формируем две функции которые формируют массив этого дерева. Но проблемма в том, что мне кроме массива нужно на выходе получить и строку такого типа:

name1{name2{}name3{name4{}name5{}}}


Много всего перепробовал но пока ничего толком не придумал, помогите нрисовать такое, буду очень признателен...






print_r(req_list());

function req_list() //считывает таблицу
{

$r=mysql_query("
select
id_req,
id_parent_req,
name
FROM
sys_requests
ORDER BY
prev
"
);

if(!$r) return false;

$list=array();

for($i=0;$i<mysql_num_rows($r);$i++)
{
$f=mysql_fetch_assoc($r);
if(empty($list[$f['id_parent_req']]))
$list[$f['id_parent_req']]=array();
$list[$f['id_parent_req']][]=$f;
}

return tree_list($list);
}


static function tree_list(&$list, $item=0) //формирует массив дерева
{
if(empty($list[$item])) return array();
$arr_tree=array();

for($i=0;$i<count($list[$item]);$i++)
{
$f=$list[$item][$i];
$f['arr_tree']=class_calc::tree_list($list, $list[$item][$i]['id_req']);
$arr_tree[]=$f;
}
return $arr_tree;
}




Спустя 4 минуты, 11 секунд (25.05.2012 - 18:29) redreem написал(а):
Цитата
name1{name2{}name3{name4{}name5{}}}


лучше пересмотреть формат данных. имеющийся довольно неудобен для работы.

Спустя 54 минуты, 27 секунд (25.05.2012 - 19:23) arc-one написал(а):
дело в том, что мне нужно получить результат именно в таком виде. "name" это я для примера, а вообще я там храню куски кода, включая разорванные циклы. Их то мне и нужно собрать в общий код.

Спустя 4 минуты, 13 секунд (25.05.2012 - 19:28) redreem написал(а):
транслятор чтоль пишешь? smile.gif

Спустя 6 минут, 6 секунд (25.05.2012 - 19:34) redreem написал(а):
рекурсивная функция (func) обхода дерева со следующим правилом:
погружаемся до тех пор, пока у узла не останется веток и тогда начинаем подъем с линковкой строк.

if ($noChild) {

return $nodeName. '{' . $nodeLexema . '}';

} else {

return $nodeName. '{' . func($childNode) . '}';

}



как-то так :)

Спустя 9 минут, 31 секунда (25.05.2012 - 19:43) arc-one написал(а):
Да что то типа простого транслятора... Спасибо, смысл понятен буду пробовать)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.