Рекурсия

Автор kak2z, 09 апреля 2015, 16:50:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

Помогите пожалуйста, я рекурсией себе уже голову сломал.
Есть вот такая таблица

id | pid | item

где id - номер элемента
где pid - номер родительского элемента
где item -имя элемента

к примеру вот так

1 | 0 | menu1
2 | 0 | menu2
3 | 1 | menu3
4 | 3 | menu4
5 | 4 | menu5

мне надо получить все дочерние элементы пункта с ID=1
как это сделать, помогите пожалуйста, я кучу примеров в инете прерыл - так и не получилось так сделать, как хочется..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

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


function BuildTree($cats, $parent_id, $only_parent = false){
if(is_array($cats) and isset($cats[$parent_id])){
if($only_parent==false){
foreach($cats[$parent_id] as $cat){
$GLOBALS['daughter'][] = (int)$cat['id_cat'];
$tree[] = $cat;
$tree[] =  BuildTree($cats, $cat['id_cat']);

}
}
}
else return null;
return $tree;
}
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

digger®

Глобальная переменная тут незачем, есть static для этого.
С большой буквы пишутся имена классов, а имена функций с маленькой.
Почему null, а не false?

iaroslav

Кстати, лучше либо

else return null;

Заменить на что-нибудь вроде

$tree = null;

Либо

return $tree;

поместить до else.
А то иначе получается что в случае else у вас два return подряд идут. Сперва возвращается null, а потом не присвоенное значение переменной $tree .

digger®

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

kak2z

Цитата: digger® от 10 апреля 2015, 07:51:43
Глобальная переменная тут незачем, есть static для этого.
С большой буквы пишутся имена классов, а имена функций с маленькой.
Почему null, а не false?

у меня рекурсия никак не получается самостоятельно)) я понимаю принцип работы)) понимаю что она делает)) но самому никак не получается воспроизвести)) приходится лезть в инет и находить там примеры)
поэтому и null так было в примере и поэтому у меня часто называются по разному переменнные))
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)