PHP创建层次结构菜单结构

时间:2014-06-23 17:08:11

标签: php arrays menu

基本上我在MYSQL中有一个表

Name    ID     Parent  
Bob     321    root  
Sue     32     root  
Boo     393    32  
Geek    72     393  
Sam     312    393  
Tovoc   341    321  
Reese   322    393  
Sheep   811    341  

我想创建一个菜单,根据父ID

输出带子菜单的菜单结构

所以它应该输出

Bob  
 Tovoc 
  Sheep

Sue
 Boo
 Sam
  Geek
 Reese

子条目与父ID相关联,如果他们有父母,则他们成为孩子。 最终它会建立一个多元化阵列。 线索?

到目前为止我得到了什么。它有效,但我无法弄清楚如何正确地增加或重置边距样式以获得漂亮的结构视图。我发现每个子元素的边距左边增加10px,如果父节点是用户则重置为1

isparent(user,1);

  function isparent($Parent,$if=1){

  $stdr = 'SELECT * FROM CraveBins WHERE UserID = '.$_SESSION[CraveUserID].' AND Parent=\''.$Parent.'\' ORDER BY Name ASC';
 $resultMainMenu = mysql_query($stdr) or die('421 '.$stdr.mysql_error());
 if(mysql_num_rows($resultMainMenu)){
 while($row = mysql_fetch_array($resultMainMenu)){
 $if++; 
 echo '<div class="binDir" onclick="setBin(this)" id="BinListUser" style="margin-left:'.(5+($if * 10)).'px" driID="'.$row[ID].'">'.$row['Name'].'</div>'; // echo main menu
 $n =  isparent($row['ID'],$if);
}//end while 
}else{
$if=1;
} // if rows        
}//end function

1 个答案:

答案 0 :(得分:0)

我不明白你的$if++。我认为这是你的缩进程度。如果是这样:删除$if++,修改内部isparent($row['ID'],$if+1),你应该没事......我猜。

或者,将您的$if++移到while循环之外(之前; o)

另外:我相信你不需要mysql_num_rows(...)。刚刚开始抓取,如果它完成,它将不返回任何内容。另外,不要使用mysql_ *,请使用mysqli或pdo。

如果您的$if旨在统计孩子,请将其称为$n,不要混淆深度和数量。