飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

php无限极分类

PHP lf 3002℃ 0评论

php无限极分类,这个问题真的很经典。在做上一个项目时,我便被安排了做无限极分类,当时,因为赶工,并且只是用作后台管理无限极添加菜单,虽然实现了,但是,每生成一次子菜单,都要去数据库查询一次…今天,在之前实现的基础上,稍稍改进,只查询一次数据库,并分成了option(后台管理)和ul(前台页面)的方式便利出来…

无限极分类option

无限极分类option

无限级分类ul

无限级分类ul

数据库设计:

CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘自增id’,
`name` varchar(32) NOT NULL COMMENT ‘分类名称’,
`code` varchar(32) NOT NULL COMMENT ‘分类代码’,
`parent_id` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘父分类’,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

无限极分类数据库设计

无限极分类数据库设计

这个无限极分类,还是基于递归思想实现。

1、首先遍历从数据库中取出来的二维数组$menu,输出parent_id键值为0的,即是最顶级菜单。

2、调用sub()方法,输出该菜单下的所有子级菜单。(把该菜单的id传进去,sub方法再一次便利$menu二维数组,判断输出parent_id键值为此id的子菜单,然后递归调用sub()方法,传入本菜单的id…依此循环输出所有子菜单)

[code]  option风格便利

<?php
$conn = mysql_connect(‘localhost’,’root’,’604123858′);
mysql_select_db(‘test’,$conn);
mysql_query(“set names utf8″);
$res = mysql_query(“select * from category”);
while($row = mysql_fetch_assoc($res))
{
$menu[] = $row;
}
echo ‘<select>';
foreach($menu as $k => $v)
{
if($v[‘parent_id’] == 0){
echo ‘<option value=’.$v[‘id’].’>’.$v[‘name’].'</option>';
sub($v[‘id’],’–‘);
}

}
echo ‘</select>';

function sub($id,$tag)
{
global $menu;
foreach($menu as $k => $v)
{//echo $id;die;
if($id == $v[‘parent_id’]){
echo ‘<option>’.$tag.$v[‘name’].'</option>';
sub($v[‘id’],’–‘.$tag);
}

}
}
?>

option

option

[/code]

 

[code]ul风格便利

<?php
$conn = mysql_connect(‘localhost’,’root’,’604123858′);
mysql_select_db(‘test’,$conn);
mysql_query(“set names utf8″);
$res = mysql_query(“select * from category”);
while($row = mysql_fetch_assoc($res))
{
$menu[] = $row;
}
echo ‘<ul>';
foreach($menu as $k => $v)
{
if($v[‘parent_id’] == 0){
echo ‘<li>’.$v[‘name’];
sub($v[‘id’],”);
}

}
echo ‘</ul>';

function sub($id)
{
echo “<ol>”;
global $menu;
foreach($menu as $k => $v)
{//echo $id;die;
if($id == $v[‘parent_id’]){
echo ‘<li>’.$v[‘name’].'</li>';
sub($v[‘id’]);
echo ‘</li>';
}

}
echo ‘</ol>';
echo “</li>”;
}
?>

ul风格

ul风格

[/code]

转载请注明:飞嗨 » php无限极分类

喜欢 (0)or分享 (0)

Warning: Use of undefined constant PRC - assumed 'PRC' (this will throw an Error in a future version of PHP) in /work/php/blog/wp-content/themes/yusi1.0/comments.php on line 17
发表我的评论
取消评论

表情
粤ICP备15018643号-1