我正在尝试一个菜单,其中父类别可以有尽可能多的子类别。子类别可以有多个子类别等等……
例如:
- 列表项:
- 列表1
- 列表2
- 列表2 a
- 列表2 b
- 列表2 b i
对此有什么见解吗???
PS。使用编码点火器HMVC
目前我的工作单位:
正在使用助手函数。。。
我可以通过以下代码查看2级嵌套类别:
<ul>
<?php foreach($results as $row){ ?>
<li>
<?php echo $row->cat_title; ?>
<?php
$childs = get_child_cat_by_id($row->cat_id);
if(!empty($childs)){ ?>
<ul>
<?php
foreach($childs as $child){ ?>
<li><?php echo $child->cat_title; ?>
<?php
$sub_child = get_sub_childs($child->cat_id);
if(!empty($sub_child)){ ?>
<ul>
<?php
foreach($sub_child as $children){ ?>
<li><?php echo $children->cat_title; ?> </li>
<?php }?>
</ul>
<?php } ?>
</li>
<?php }?>
</ul>
<?php } ?>
</li>
<?php } ?>
</ul>
此代码在视图中使用。我需要一个递归方法,这样就不需要多次调用函数getchildcatbyid。
我为您的问题提供的最佳解决方案是使用ORM支持分层数据,如Doctrine 2或具有嵌套集扩展的快速数据映射器
但一个更简单的解决方案是获得一个嵌套的数据数组(处理您的模型),并尝试类似的方法:
//Make a list from an array
function nestedArrayToList($array, $property)
{
$output = '<ul>';
foreach ($array as $key => $mixedValue) {
if (is_array($mixedValue)) {
// Recursive step
$output .= '<li>' . nestedArrayToList($mixedValue) . '</li>';
} else {
// Simply output the property
$output .= '<li>' . $mixedValue->$property . '</li>';
}
}
$output .= '</ul>';
return $output;
}
nestedArrayToList($row)
我没有测试它,但想法就在这里。