Задать вопрос

Как правильно написать рекурсию для древовидных категорий?

Здравствуйте. Столкнулся с проблемой при написании метода для вывода древовидных категорий на Laravel. Ниже представлен код

public function index()
    {
        $categories = Categories::all()->all();
        foreach ($categories as $category) {
            if ($category->parent == 0) {
                echo $category->name;
            }

            echo '<ul>';
            Categories::getTree($categories, $category->categories_id);
            echo '</ul>';
        }
    }


public static function getTree($categories, $parent_id)
    {

        for ($i = 0; $i < count($categories); $i++) {
            if($categories[$i]->parent == $parent_id) {
                echo '<li><a>' . $categories[$i]->name  . '</a></li>';
            }

            self::getTree($categories, $categories[$i]->categories_id);
        }

    }
  • Вопрос задан
  • 101 просмотр
Подписаться 2 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Arik
?
public function index()
{
    $categories = ...;
    echo self::getTree($categories);
}

public static function getTree($categories, $parent_id = 0) // или null, смотря что по дефолту
{
    $result = '';
    foreach ($categories as $category) {
        if ($category->parent != $parent_id) {
            continue;
        }

        $result .= sprintf('<li><a>%s</a>%s</li>',
            $category->name,
            self::getTree($categories, $category->categories_id) // или $category->id, смотря где там id
        );
    }

    return $result ? sprintf('<ul>%s</ul>', $result) : '';
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
все уже есть
RecursiveDirectoryIterator
RecursiveTreeIterator
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽