PHP MYSQL 的多级分类树结构

有一张 class 分类表,字段为:

ID,分类ID号
classname,分类名

big_id,上级分类名

要求做出可以无限分类的

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

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

PS:我很想悬赏高分,但是我的积分不足,只能把现有的全部悬赏出来了,谢谢

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


/* 表结构

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>';

把$fenlei去了,
换成这个
$aa='';
foreach(getAllOrderColumns() as $v){
if($v[level]==0){
$aa .= "$v[name]";
}elseif($v[level]==1){
$aa .= "$v[name]";
}elseif($v[level]==2){
$aa .= "$v[name]
";
}
}
$aa.='';

追问

你好,我不是要调用出分类,直接调用出分类我这里是可以做到的,我要的是分类按照级别来显示出来哦

追答


真不知道你想要什么。。。。。。

追问

不好意思,确认晚了,经过测试,完好!谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-18
这是我自己以前封装的一个方法,有几点需要注意的地方我已经标注出来了:
/**
* 获取按所属的分类排序的信息
*
* @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;
}本回答被网友采纳
第2个回答  2014-05-18
用jQuery的小插件jquery_treeview.追问

请帮忙写出完整的代码

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网