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 написал(а):
транслятор чтоль пишешь?
Спустя 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 написал(а):
Да что то типа простого транслятора... Спасибо, смысл понятен буду пробовать)