Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2树菜单的递归?_Php_Recursion_Yii2 - Fatal编程技术网

Php Yii2树菜单的递归?

Php Yii2树菜单的递归?,php,recursion,yii2,Php,Recursion,Yii2,大家晚安!请帮助递归,我犯了一个错误,我需要输出类别,如上一个例子 型号: protected function buildTree($data, $rootID = 0) { $tree = []; foreach ($data as $id => $node) { if ($node->parent_id == $rootID) { unset($data[$id]); $node->c

大家晚安!请帮助递归,我犯了一个错误,我需要输出类别,如上一个例子

型号:

    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;
}

public function getTree()
{
    $data = Category::find()->all();
    return $this->buildTree($data);
}
视图:


这就是我得到树的方式,这是你的代码

root
    category
    category
    category
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    category
    category
根目录
类别
类别
类别

----子类别打印树时,还应在视图中添加递归。 在视图中尝试以下操作:

$form = \yii\bootstrap\ActiveForm::begin();

foreach ($tree as $cat) {
    printNode($cat);
}
function printNode($cat, $level = 1) {
    echo '<br><div class="spoiler-title">' . $cat['title'] . '</div>';
    if (count($cat['childs']) > 0) {
        foreach ($cat['childs'] as $child) {
            echo \yii\helpers\Html::checkbox('someName[]') . ' ' . $child['title'] . '<br>';
            if (count($child['childs']) > 0) {
                printNode($child, $level + 1);
            }
        }
    }
}
\yii\bootstrap\ActiveForm::end();
$form=\yii\bootstrap\ActiveForm::begin();
foreach($tree as$cat){
printNode($cat);
}
函数printNode($cat,$level=1){
回显“
”.$cat['title']”; 如果(计数($cat['childs'])>0){ foreach($cat['childs']作为$child){ echo\yii\helpers\Html::checkbox('someName[]')。$child['title'].
; 如果(计数($child['childs'])>0){ printNode($child,$level+1); } } } } \yii\bootstrap\ActiveForm::end();
我肯定必须在视图中显示类别,以便以后我可以从中创建复选框,这就是为什么我要在视图中尝试调试树结构是否正确构建的原因。如果它是正确的树,您应该使用递归来显示所有节点及其子节点。我编辑了我的函数并添加了缩进以打印适当级别的节点。试一试,看看会显示什么?非常感谢Marcin Gorde,赢得了,再问你一个问题,我不太明白你的意思,我不太明白你的意思?是否要为父节点添加特定格式?每个节点都有自己的子节点,它们作为父节点下面的列表打印。这对于树的每个级别都是相同的。您希望如何显示您的树?下面是一个示例,如图所示
$form = \yii\bootstrap\ActiveForm::begin();

foreach ($tree as $cat) {
    printNode($cat);
}
function printNode($cat, $level = 1) {
    echo '<br><div class="spoiler-title">' . $cat['title'] . '</div>';
    if (count($cat['childs']) > 0) {
        foreach ($cat['childs'] as $child) {
            echo \yii\helpers\Html::checkbox('someName[]') . ' ' . $child['title'] . '<br>';
            if (count($child['childs']) > 0) {
                printNode($child, $level + 1);
            }
        }
    }
}
\yii\bootstrap\ActiveForm::end();