php递归值自动读取无限分类目录
对于数据库最简单的一张表实现,建立category表,字段分别为ID,name,f_id.
ID为自增主键,name为类名,f_id为父级目录,默认为根目录0.
<?php header ( "content-type:text/html; charset=utf-8" ); mysql_connect ( "localhost", "admin", "1123581321" ); mysql_query ( "set names utf8" ); ?> <?php function getmenu($f_id = 0) { $menu_arr = array (); $sql = "SELECT * FROM test.`category` where f_id=" . $f_id; $result = mysql_query ( $sql ); if (! $result) { return false; } $i = 1; $row = ""; while ( $row = mysql_fetch_assoc ( $result ) ) { $menu_arr [$i] = $row; $menu_arr[$i]["next"]=getmenu($row['ID']); $i ++; } return $menu_arr; } $menus = getmenu (); echo "<pre>"; print_r ( $menus ); echo "</pre>"; ?>
输出结构为
Array ( [1] => Array ( [ID] => 1 [name] => 前端 [f_id] => 0 [next] => Array ( [1] => Array ( [ID] => 5 [name] => ajax [f_id] => 1 [next] => Array ( [1] => Array ( [ID] => 11 [name] => EXTJS [f_id] => 5 [next] => Array ( ) ) ) ) [2] => Array ( [ID] => 6 [name] => javascript [f_id] => 1 [next] => Array ( [1] => Array ( [ID] => 10 [name] => JQUERY [f_id] => 6 [next] => Array ( ) ) ) ) [3] => Array ( [ID] => 7 [name] => html5 [f_id] => 1 [next] => Array ( ) ) ) ) [2] => Array ( [ID] => 2 [name] => php [f_id] => 0 [next] => Array ( [1] => Array ( [ID] => 8 [name] => wordpress [f_id] => 2 [next] => Array ( ) ) [2] => Array ( [ID] => 9 [name] => discuz [f_id] => 2 [next] => Array ( ) ) ) ) [3] => Array ( [ID] => 4 [name] => net [f_id] => 0 [next] => Array ( ) ) )
最后递归在前台输出
<?php function pri($menus){ foreach ($menus as $va){ echo "<div>".$va["name"]; if($va["next"]){ pri($va["next"]); } echo "</div>"; } } pri($menus); ?>
结构为
<body> <div> 前端 <div> ajax <div> EXTJS </div> </div> <div> javascript <div> JQUERY </div> </div> <div> html5 </div> </div> <div> php <div> wordpress </div> <div> discuz </div> </div> <div> net </div> </body>
为了实现js的菜单的联动效果,结构也可以写成
<?php function pri($menu){?> <div><?php foreach ($menu as $va){?> <div <?php if($va["next"]){?> class="title" <?php }?>><?php echo $va["name"]?></div> <?php if($va["next"]){pri($va["next"]);}?> <?php }?></div> <?php }?> <?php pri($menus)?>
html为
<div> <div class="title"> 前端 </div> <div> <div class="title"> ajax </div> <div> <div> EXTJS </div> </div> <div class="title"> javascript </div> <div> <div> JQUERY </div> </div> <div> html5 </div> </div> <div class="title"> php </div> <div> <div> wordpress </div> <div> discuz </div> </div> <div> net </div> </div>