Почему я вхожу в бесконечный цикл с этой родительско-дочерней рекурсией?

0

У меня есть следующие две функции, которые должны возвращать древовидное раскрывающееся меню.

PHP:

function getCategories()
{
    $src = $this->db->query('SELECT * FROM categories')->fetchAll();
    return $this->tree($src, 0, '');
}

function tree($src, $level, $html)
{
    $dashes = '';
    for($i=0;$i<$level;$i++)
    {
        $dashes .= '-';
    }

    foreach($src as $row)
    {
        if($row['parent'] == $level)
        {
            $html .= '<option value="'. $row['id'] .'">'. $dashes . $row['name'] .'</option>';
        }
    }

    $html .= $this->tree($src, $level + 1, $html);

    return $html;
}

Ожидаемый результат HTML:

<option value="1">Category1</option>
<option value="2">-Category2</option>
<option value="3">--Category3</option>
<option value="4">-Category4</option>

Но это приводит к бесконечному циклу. Зачем?

  • 0
    Отладьте свой код, и вы узнаете.
  • 5
    Ну, у вас нет условий возврата. Каждый вызов tree безусловно приведет к другому вызову tree , что приведет к другому вызову tree и т. Д.
Показать ещё 1 комментарий
Теги:
recursion
tree
parent-child

1 ответ

1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню