an_kalinovski
Новичок
Неправильно осуществляю рекурсию
Не могу правильно сделать рекурсию, плиз подскажите...
Фрагмент из базы:
===============
id parent_id
32 0
33 0
34 33
35 33
36 34
=================
Рекурсивная функция такая вот
function processNode($parentId = 0, $result='', $level=0)
{
++$level;
$categories = $this->Dao->getProductsByParentId($parentId);
if ( count($categories) > 0 )
{
foreach ( $categories as $category )
{
$self = $category->getId();
$result .= "#".$self."->".$level;
$this->processNode($self, $result, $level) ;
}
}
return $result;
}
=================
Она выплевывает $result в самом начале (просто ставлю echo $result
#32->1
#32->1#33->1
#32->1#33->1#34->2
#32->1#33->1#34->2#36->3
#32->1#33->1#34->2#35->2
Т.е. в последнем выхлопе почемуто съедается кусок #36->3, как будто не идет второй объект в цикл после выхода из рекурсии. Как этого избежать?
Пардон, разобрался сам... При уходе на второй круг в цикле для резута восстанавливалось значение которое было до выполнения рекурсии... Нужно просто присваивать еще и результак рекурсивного обхода (со сброшенным в ноль резултом )))))
Не могу правильно сделать рекурсию, плиз подскажите...
Фрагмент из базы:
===============
id parent_id
32 0
33 0
34 33
35 33
36 34
=================
Рекурсивная функция такая вот
function processNode($parentId = 0, $result='', $level=0)
{
++$level;
$categories = $this->Dao->getProductsByParentId($parentId);
if ( count($categories) > 0 )
{
foreach ( $categories as $category )
{
$self = $category->getId();
$result .= "#".$self."->".$level;
$this->processNode($self, $result, $level) ;
}
}
return $result;
}
=================
Она выплевывает $result в самом начале (просто ставлю echo $result

#32->1
#32->1#33->1
#32->1#33->1#34->2
#32->1#33->1#34->2#36->3
#32->1#33->1#34->2#35->2
Т.е. в последнем выхлопе почемуто съедается кусок #36->3, как будто не идет второй объект в цикл после выхода из рекурсии. Как этого избежать?
Пардон, разобрался сам... При уходе на второй круг в цикле для резута восстанавливалось значение которое было до выполнения рекурсии... Нужно просто присваивать еще и результак рекурсивного обхода (со сброшенным в ноль резултом )))))