PHP MYSQL 的多级分类树结构

有一张class分类表,字段为:ID,分类ID号classname,分类名big_id,上级分类名要求做出可以无限分类的样式最好是可以自行调用,例如一般CMS的分类调用<... 有一张 class 分类表,字段为:

ID,分类ID号
classname,分类名

big_id,上级分类名

要求做出可以无限分类的

样式最好是可以自行调用,例如一般CMS的分类调用

<?php "一级分类"?>
<ul>
<h3>顶级分类</h3>
<li>二级分类</li>
<p>三级分类</p>
<li>二级分类</li>
<li>二级分类</li>
</ul>

PS:我很想悬赏高分,但是我的积分不足,只能把现有的全部悬赏出来了,谢谢
展开
 我来答
力宏328
2014-05-18 · 超过18用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:45.1万
展开全部

打开数据库那就不写了。
前几天刚写了一个。你看下


/* 表结构

CREATE TABLE `lh_categroy` (

  `id` int(10) NOT NULL auto_increment,

  `parentid` int(6) NOT NULL,

  `name` varchar(255) NOT NULL,

  `keyword` varchar(255) NOT NULL COMMENT '关键字',

  `des` varchar(255) NOT NULL COMMENT '描述',

  PRIMARY KEY  (`id`),

  UNIQUE KEY `name` (`name`)

) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;


*/

/**

 * 获得所有栏目排序后的列表

 * @return array

 */

function getAllOrderColumns($id = 0) {

global $columns;

$result = array();

if ($id) $result[$id] = $columns[$id];

foreach ($columns as $column) {

if ($column['parentid'] == $id) {

$column['level'] = 0;

$result[$column['id']] = $column;

getColumns($columns, $column['id'], $result, 1);

}

}

return $result;

}


function getColumns($columns, $cid, &$result, $l = 1) {

foreach ($columns as $c) {

if ($c['parentid'] == $cid) {

$c['level'] = $l;

$result[$c['id']] = $c;

getColumns($columns, $c['id'], $result, $l + 1);

}

}

}


$sql = 'select * from lh_categroy';

$query = mysql_query($sql);

while($row = mysql_fetch_assoc($query)){

$columns[]=$row;

}


$fenlei = '';

$fenlei =  '<select name="cid" style="width:200px; height:25px;">

<option value="0">请选择分类</option>';

foreach(getAllOrderColumns() as $v){

$v[name] = $v[level] ? ($v[level]==1 ? '&nbsp;&nbsp;|-'.$v[name]:'&nbsp;&nbsp;&nbsp;|-'.$v[name]) : $v[name];

$fenlei .= "<option value='$v[id]'>$v[name]</option>";

}

$fenlei .= '</select>';

echo $fenlei;

更多追问追答
追问
你好,麻烦帮忙写出这样的样式,谢谢

顶级分类
二级分类
三级分类

二级分类
二级分类
追答

把$fenlei这块改了下。。

$aa='<ul>';
foreach(getAllOrderColumns() as $v){
if($v[level]==0){
$aa .= "<h3>$v[name]</h3>";
}elseif($v[level]==1){
$aa .= "<li>$v[name]</li>";
}elseif($v[level]==2){
$aa .= "<p>$v[name]</p>";
}
}
$aa.='</ul>';
清风之835
2014-05-18 · 超过21用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:53.3万
展开全部
这是我自己以前封装的一个方法,有几点需要注意的地方我已经标注出来了:
/**
* 获取按所属的分类排序的信息
*
* @return 数组
*/
public function getTree(){
/*$data保存的是分类表的所有数据,我这fetchAll方法是自己封装的,你没有就自己想个办法,我相信你会的*/

$data=$this->fetchAll();
/*调用treeList函数,返回分级后的数组,你可以用var_dump()方法打印出这个数组,你就可以发现多了个level的下标元素,level就是你的类等级*/
return $this->treeList($data,0);
}

private function treeList($data,$cid,$level=1){
static $list=array();
foreach ($data as $value){
if($value['cid']==$cid){
$value['level']=$level;
$list[]=$value;
$this->treeList($data,$value['id'],$level+1);
}
}
return $list;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
891377446
2014-05-18 · TA获得超过475个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:97.3万
展开全部
用jQuery的小插件jquery_treeview.
追问
请帮忙写出完整的代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式