您的位置:首页 > 其它

递归读取输出无限分类目录

2012-04-20 23:24 330 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: