首页 >

分享一个php实现无限级分类程序代码

后端开发|php教程分享一个php实现无限级分类程序代码
分享,一个,php,实现,无限,级,分类,程序,代码,无限,级,分类,是,所,程序开发,中会,碰到,一个,问题,下
后端开发-php教程
无限级分类是所有程序开发中会碰到的一个问题,下面我来介绍php+mysql实现的一个无限级分类程序,有需要的朋友可参考参考。
运费asp网站源码,vscode需要安装什么,改ubuntu语言,项目在tomcat哪里,sqlite数据库的页,抖音直播间隐藏粉丝爬虫软件,php uv统计,佛山seo软件优化品牌,win10 修改网站模板,织梦模板 a5lzw
下面给大家看看我的数据库结构吧:数据库的名字为:fa_category
系统维护页面源码,ubuntu下载解压内核,tomcat和记事本文件,天下3+爬虫,php星辰个人发卡网站源码,seo公司资源lzw
FieldTypeComment
cidint(11)分类id
catenamevarchar(255)分类名字
catetypeint(1)分类类型,1为单页面,2为普通分类
catdirvarchar(255)英文目录
displayint(1)1为显示,2为不显示
keywordsvarchar(255)栏目关键字
descriptiontext栏目描述
ctimeint(11)创建时间
parentidint(11)父节点id,最高节点父节点为0

我们使用一个parentid字段来记录父节点的id,如果parentid为0,则为root。不多说,我们看看代码怎么写吧。我们要实现的功能就是如图片所示:

开源电商后台管理系统源码,ubuntu桌面显示问题,tomcat数据库连接不上,爬虫流浪地球影评,php开发网络图书销售系统,seo运动技巧lzw
分享一个php实现无限级分类程序代码

怎么样把它这样显示呢?这个问题我想了很久,先看看这段SQL语句吧,

代码如下复制代码

SELECT c.cat_id, c.cat_name, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade ,c.sort_order, COUNT( s.cat_id ) AS has_children
FROM ecs_category AS c
LEFT JOIN ecs_category AS s ON s.parent_id = c.cat_id
GROUP BY c.cat_id
ORDER BY c.parent_id, c.sort_order ASC

用左连接连接一个表,返回一个字段 has_children,这个字段是记录有多少子节点。

看看代码吧,

代码如下复制代码
public function getCategory($catid=0,$re_type = true,$selected=0)
{
$db = new Public_DataBase();
$sql = ‘select c.cid,c.catename,c.catetype,c.ctime,c.parentid,count(s.cid) as has_children from ‘.
__MYSQL_PRE.’category as c left join ‘.
__MYSQL_PRE.’category as s on s.parentid=c.cid group by c.cid order by c.parentid asc’;
$res = $db->selectTable($sql);
$cateInfo = self::getChildTree($catid,$res);
if($re_type==true)
{
$select = ”;
foreach($cateInfo as $val)
{
$select .= ‘<option value="' . $val['cid'] . '" ';
$select .= ($selected == $val[‘cid’]) ? “selected=’ture'” : ”;
$select .= ‘>’;
if($val[‘level’]>0)
{
$select .= str_repeat(‘ ‘, $val[‘level’] * 4);
}
$select .= htmlspecialchars(addslashes($val[‘catename’]), ENT_QUOTES) . ”;
}
return $select;
}

else
{
foreach($cateInfo as $key=>$val)
{
if($val[‘level’]>0)
{
$cateInfo[$key][‘catename’] = “|”.str_repeat(‘ ‘, $val[‘level’] * 8).”└─”.$val[‘catename’];

}
}
return $cateInfo;
}

}

/**
* 通过父ID递归得到所有子节点树
* @param int $catid 上级分类
* @param array $arr 含有所有分类的数组
* @return array
*/
public function getChildTree($catid,$arr)
{
$level = $last_cat_id = 0;
while (!empty($arr))
{
foreach($arr as $key=>$value)
{
$cid = $value[‘cid’];
if ($level == 0 && $last_cat_id == 0)
{
if ($value[‘parentid’] > 0)
{
break;
}
$options[$cid] = $value;
$options[$cid][‘level’] = $level;
$options[$cid][‘id’] = $cid;
$options[$cid][‘name’] = $value[‘catename’];
unset($arr[$key]);
if ($value[‘has_children’] == 0)
{
continue;
}
$last_cat_id = $cid;
$cat_id_array = array($cid);
$level_array[$last_cat_id] = ++$level;
continue;

}
if ($value[‘parentid’] == $last_cat_id)
{
$options[$cid] = $value;
$options[$cid][‘level’] = $level;
$options[$cid][‘id’] = $cid;
$options[$cid][‘name’] = $value[‘catename’];
unset($arr[$key]);
if ($value[‘has_children’] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cid;
$cat_id_array[] = $cid;
$level_array[$last_cat_id] = ++$level;
}
}
elseif ($value[‘parentid’] > $last_cat_id)
{
break;
}
}

$count = count($cat_id_array);
if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);

}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
return $options;

}用smarty的一个循环就可以把它显示出来 效果和上面图片的一样!大家有什么问题可以给我留言。

http://www.liuzhongwei.com/PHPjc/633090.htmlwww.liuzhongwei.comtruehttp://www.liuzhongwei.com/PHPjc/633090.htmlTechArticle无限级分类是所有程序开发中会碰到的一个问题,下面我来介绍php+mysql实现的一个无限级分类程序,有需要的朋友可参考参考。 下面给大家…

分享一个php实现无限级分类程序代码
  • 利用DB2 9原生XML和PHP来简化XML应用程序
  • 利用DB2 9原生XML和PHP来简化XML应用程序 | 利用DB2 9原生XML和PHP来简化XML应用程序 ...

    分享一个php实现无限级分类程序代码
  • 微信小程序开发中常用工具类的实例详解
  • 微信小程序开发中常用工具类的实例详解 | 微信小程序开发中常用工具类的实例详解 ...

    分享一个php实现无限级分类程序代码
  • 浅议PHP程序开发中的模板选择
  • 浅议PHP程序开发中的模板选择 | 浅议PHP程序开发中的模板选择 ...