2013-09-22 29 views
1

我想要制作一个菜单,我不知道菜单有多深。如何从我的数据库中获取多维菜单?

这是我的数据库表的样子: 表menu领域idparent_idname

我已经tryed这得到一个不错的阵列回来,但它不工作:

public function get() 
{ 
    $nodeList = array(); 
    $tree  = array(); 
    $query = $this->db->get('menu'); 
    $result = $query->result_array(); 
    foreach ($result as $row) { 
     $nodeList[$row['id']] = array_merge($row, array('children' => array())); 
    } 

    foreach ($nodeList as $nodeId => &$node) { 
     if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) { 
      $tree[] =& $node; 
     } else { 
      $nodeList[$node['parent']]['children'][] =& $node; 
     } 
    } 

    return $nodeList; 
} 

最终我想做到这一点(一个漂亮的菜单):

<ul> 
<li><a href="">Apple<a/> 
    <ul> 
     <li><a href="">Iphone</a></li> 
      <ul> 
       <li><a href="">4S</a></li> 
       <li><a href="">5</a></li> 
      </ul> 
     <li><a href="">Ipad</a></li> 
      <ul> 
       <li><a href="">4</a></li> 
       <li><a href="">5</a></li> 
      </ul> 
    </ul> 
</li> 
<li><a href="">Samsung<a/> 
    <ul> 
     <li><a href="">Galaxy</a></li> 
      <ul> 
       <li><a href="">S3</a></li> 
       <li><a href="">S4</a></li> 
      </ul> 
    </ul> 
</li> 

我希望你明白我的问题,可以帮助我。我真的!需要这个。

感谢;)

回答

2

get()或许应该回到$tree,不$nodeList。除此之外,它似乎很好。

更新。这个例子展示了如何构建嵌套菜单的HTML:

function getUl($nodes) 
{ 
    $result = "<ul>\n"; 
    foreach ($nodes as $n) { 
     $result .= '<li><a href="...">...</a>'; 
     if (!empty($n['children'])) { 
      $result .= getUl($n['children']); 
     } 
     $result .= "</li>\n"; 
    } 
    $result .= "\n</ul>"; 
    return $result; 
} 
+0

omg这是愚蠢的我,thx:D,但你也可以帮助设置菜单?我不知道如何解决这个问题 – apero

+1

@apero尝试一个我发布的例子。 –

+0

谢谢你,你真是太棒了;) – apero

相关问题