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();