无限级别的,使用递归编程比较容易,基本方法是定义一个显示子菜单的函数:
function ShowMenu($pid){
....显示数据库里面PID为$pid的所有菜单项目以及子项目(通过调用自身实现).....
}
主程序调用ShowMenu(0)实现输出整个菜单。
整个程序的逻辑一般这样:
echo ShowMenu(0)function ShowMenu($pid){
//如果数据库不存在PID=$pid的记录,返回空串""
$sql="select count(*) from tab where pid=$pid"
mysql_query($sql)
list($cnt)=mysql_fetch_row($res)
mysql_free_result($res)
if ($cnt==0) return ''
//否则返回所有的子菜单项,格式<UL><LI>...<LI>...</UL>
$ret_str='<UL>'
$sql="select id,title from tab where pid=$pid"
mysql_query($sql)
while(list($id,$title)=mysql_fetch_row($res)){
$ret_str.="<LI>$title".ShowMenu($id)."</LI>"
}
mysql_free_result($res)
$ret_str.='<UL>'
return $ret_str
}
没懂你的CID,和scid 是什么。
无限分类是无限的树形结构么?
根据无限树形结构说一下。一般情况下 是用递归调用来处理的。字段中 用id 和parentid 两个字段。 假设有一个函数 fetch是取mysql 数据的。简单写一个函数
function getdata($parentid){
$tree=fetch("parentid = {$parentid}")
foreach($tree as $k=>$v){
$tree[$k]['children']=getdata($v['id'])
}
return $tree
}
调用$tree=getdata(0)
$tree 就是树形的。
当然 如果有用框架估计更简单点。比如laravel 。定义一个$tree的模型,表中有id,和parentid两字段。模型中新增两个函数
public function childrentree()
{
return $this->hasMany(get_class($this), 'parentid', 'id')
}
public function children()
{
return $this->childrentree()
}
然后使用
tree::with(["children"])->where('parentid', 0)->get() 就可以获取树形菜单
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)