如何正确显示我的多级菜单。
这里有两种方法,第一种方法构建树(递归),第二种方法从数据库中提取所有类别。如何在VIEW中正确显示菜单以及<option value = ""> Select the category </ option>
中的菜单。
当我输出并处理数组的失败时,我失去了多级嵌套,第三级也不会出现并且也使用了很多foreach,因为它并不聪明?
这是类别模型
/**
* Build tree
* @param $data
* @param int $parent_id
* @return array
*/
protected function buildTree($data, $parent_id = 0)
{
$tree = [];
foreach ($data as $id => $node) {
if ($node['parent_id'] == $parent_id) {
unset($data[$id]);
$node['childs'] = $this->buildTree($data, $node['id']);
$tree[] = $node;
}
}
return $tree;
}
/**
* Get category
* @return array
*/
public function getAllCategories()
{
$data = self::find()->asArray()->all();
$data = $this->buildTree($data);
return $data;
}
这是视图中的示例。 第三次嵌套不起作用,或者我不知道如何进行无限嵌套
<select id="category-parent_id" class="form-control" name="Category[parent_id]" aria-invalid="false">
<option value="">Select category</option>
<?php foreach ($category->getAllCategories() as $cats) : ?>
<option value="<?= $cats['id'] ?>"><?= $cats['title'] ?></option>
<?php if ($cats['childs'] > 0) : ?>
<?php foreach ($cats['childs'] as $cat) : ?>
<option value="<?= $cat['id'] ?>">--- <?= $cat['title'] ?></option>
<?php if ($cat['childs'] > 0) : ?>
<?php foreach ($cat['childs'] as $childs) : ?>
<option value="<?= $childs['id'] ?>">--- <?= $childs['title'] ?></option>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</select>