Ответы пользователя по тегу Рекурсия
  • Как получить данные с помощью рекурсии?

    В модели category сделал виртуальное свойство
    public $childs;

    в модели
    /**
         * Строим дерево категории
         *
         * @param $data
         * @param int $rootID
         * @return array
         */
        protected function buildTree($data, $rootID = 0)
        {
            $tree = [];
            foreach ($data as $id => $node) {
                if ($node['parent_id'] == $rootID) {
                    unset($data[$id]);
                    $node['childs'] = $this->buildTree($data, $node['id']);
                    $tree[] = $node;
                }
            }
            return $tree;
        }
    
        /**
         * Получаю все категории
         *
         * @return array
         */
        public function getAllCategories()
        {
            $data = Category::find()->asArray()->all();
            return $this->buildTree($data);
        }


    в controller
    $tree = $model->getAllCategories();
    return $this->render('profile', ['tree' => $tree]);


    во view
    foreach ($tree as $cat) {
    // root 1-й уровень
        echo $cat['title'];
        if ($cat['childs'] > 0) {
            foreach ($cat['childs'] as $childs) {
    // category 2-й уровень
                if (empty($childs['childs'])) {
                    echo  $childs['title'];
                } else {
                    echo '<b><br/>' . $childs['title'] . '</b><br/>';
                }
                foreach ($childs['childs'] as $child) {
    // category 3-й уровень
                    echo $child['title'];
                }
            }
        }
        echo '</div>';
    }
    Ответ написан
    3 комментария