代码点火器中的递归


Recursion in codeigniter?

我正在尝试一个菜单,其中父类别可以有尽可能多的子类别。子类别可以有多个子类别等等……

例如:

  • 列表项:
    • 列表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)

我没有测试它,但想法就在这里。