2

我有一个看起来像这样的数据库:

在此处输入图像描述

我可以使用以下代码从此菜单生成树:

foreach($categories->result_array() as $category):
    $menu_array[$category['id']] = array('name' => $category['name'], 'parent' => $category['parent'], 'id' => $category['id']);
endforeach;

echo '<ul>';
echo $this->tasks->generateCategoriesTree(NULL, $menu_array);
echo '</ul>';

这是上面代码调用的函数:

function generateCategoriesTree($parent, $menu_array, $result = NULL)
{
    foreach($menu_array as $key => $value):
        if ($value['parent'] == $parent):
            $result .= '<li>';
            $result .= '<a href="#">' . $value['name'] . '</a>';
            $result .= '<ul>';
            $result .= $this->generateCategoriesTree($key, $menu_array);
            $result .= '</li></ul>';
          endif;
    endforeach;

    return $result;
}

它会生成一棵如下所示的树:

在此处输入图像描述

我现在的问题是让父类别变粗。在我的数据库中,作为父母的行的父列为NULL. 我尝试了几件事,例如if ($value['parent'] !== $parent)然后应用粗体样式,但这不起作用。老实说,我无法解决这个问题。我将不胜感激你们可以提供的任何帮助!

4

3 回答 3

2

如果父级等于 NULL,我会将其设为粗体。我不确定语法的使用,因为我通常对 if 结构使用括号。

function generateCategoriesTree($parent, $menu_array, $result = NULL)
{
    foreach($menu_array as $key => $value):
        if ($value['parent'] == $parent):
            $result .= '<li>';
            if($value['parent'] == NULL):
                $result .= '<a class="BOLDCLASS" href="#">' . $value['name'] . '</a>';
            else:
                $result .= '<a href="#">' . $value['name'] . '</a>';
            endif;  
            $result .= '<ul>';
            $result .= $this->generateCategoriesTree($key, $menu_array);
            $result .= '</li></ul>';
          endif;
    endforeach;

    return $result;
}

当然,您必须使用一些样式来使BOLDCLASS类变为粗体。

于 2012-04-30T20:05:22.573 回答
1

交换generateCategoriesTree函数声明中的参数,以便$menu_array$parent. 所以:

function generateCategoriesTree($menu_array, $parent = 0, $result = null) { ... }

请记住也要更改generateCategoriesTree函数调用中的参数顺序...

在您的调用函数中:

echo $this->tasks->generateCategoriesTree($menu_array);

generateCategoriesTree其本身而言:

$result .= $this->generateCategoriesTree($menu_array, $key);  

然后简单地测试是否$parent == 0并应用粗体样式。

于 2012-04-30T20:05:35.270 回答
0

对于顶级,你试过这个吗?

if ($value['parent'] !== '')

然后,一旦解决了该级别,您就可以使用 OR 运算符。

于 2012-04-30T19:55:27.850 回答