Задать вопрос
@maiskiykot
Free coder

Как правильно вернуть данные из рекурсивной функции?

Всем привет! Столкнулся тут с маленькой проблемой. Или не очень маленькой. В общем, есть дерево категорий и нужно дойти до главной и получить ее название. Для этого написал небольшую функцию, которая вызывает рекурсивно себя пока не доходит до корня. Однако проблема в том, что return у нее теряется и она не возвращает в исходную функцию вывод данных. Срабатывает по echo (показывает, что правильно функция работает), но теперь не сохраняется это в исходной функции. Просто пустое поле. Как правильно вернуть данные в исходную функцию?

public function getRootCategory($id) {
     $query = Category::find()
                ->select(['id',
            'name',
            'parent_id'])
                ->andWhere(['in', 'id', $id]);

            $data = $query->asArray()->all();  
            if ($data[0]['parent_id'] > 0) {
             $this->getRootCategory($data[0]['parent_id']);
            }
            else {
             return (?)  $data[0]['name'];
            }
    }
  • Вопрос задан
  • 50 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
- $this->getRootCategory($data[0]['parent_id']);
+ return $this->getRootCategory($data[0]['parent_id']);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Здесь не нужна рекурсия. Чтобы дойти до корня, достаточно использовать примитивный цикл.
public function getRootCategory($id) {
    do {
        $data = Category::find()
                ->select(['name', 'parent_id'])
                ->where(['id', $id]);
                ->first();
        $id = $data['parent_id'];
    } while ($id > 0);
    return $data['name'];
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы