Функция построения дерева категорий

Реализованая в виде метода класса позволяет построить дерево не только целиком, но и от любой существующей категории

Для построения дерева буду использовать рекурсию. По умолчанию дерево начинает строится с категорий значение parent_id которых равняется null, но при необходимости, можно исправить и на ноль. Соответственно, если нам нужно построить полное дерево, вызываем метод без аргументов, иначе указываем id категории.

    protected function tree($id = null, $start = true)
    {
        if($id){
            // Делаем выбору дочерних категорий из базы данных
            $arr = db()->fetchAll('SELECT * FROM `blogs_categories` WHERE `parent_id` = :p', ['p' => $id], __CLASS__);
        }else{
            $arr = db()->fetchAll('SELECT * FROM `blogs_categories` WHERE `parent_id` IS NULL ', [], __CLASS__);
        }
        // Перебираем их и делаем рекурсивный запрос
        foreach($arr as &$i){
            $i->children = $this->tree($i->id);
        }
       // Возвращаем результат
       return $arr;
    }
Grewi 2024