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

Здравствуйте. Столкнулся с проблемой при написании метода для вывода древовидных категорий на 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);
        }

    }
  • Вопрос задан
  • 96 просмотров
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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