简单版的PHP生成无限极分类代码。其中包括了数据库设计、以及输出分类HTML代码。
SQL文件表Class,c_id主键自增,c_name分类名称,c_status分类状态(这里没有用到),c_parent_id父级ID
很显然一级菜单分别为:服装,食品,家具,孕婴,化妆品,它们的c_parent_id都为0,没有父级。
其他字段c_parent_id所指的值是上一级菜单的c_id,进行分类,综合同理!
废话不多说,相信都懂。实在不懂就没办法了!
直接上代码
1、首先查询出来class表所有数据
array(24) { [0]=> array(4) { ["c_id"]=> int(1) ["c_name"]=> string(6) "服饰" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) } [1]=> array(4) { ["c_id"]=> int(2) ["c_name"]=> string(6) "食品" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) } [2]=> array(4) { ["c_id"]=> int(3) ["c_name"]=> string(6) "家居" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) } [3]=> array(4) { ["c_id"]=> int(4) ["c_name"]=> string(6) "孕婴" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) } [4]=> array(4) { ["c_id"]=> int(5) ["c_name"]=> string(9) "化妆品" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) } [5]=> array(4) { ["c_id"]=> int(8) ["c_name"]=> string(6) "男装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) } [6]=> array(4) { ["c_id"]=> int(9) ["c_name"]=> string(6) "女装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) } [7]=> array(4) { ["c_id"]=> int(10) ["c_name"]=> string(6) "童装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) } [8]=> array(4) { ["c_id"]=> int(11) ["c_name"]=> string(6) "内衣" ["c_status"]=> NULL ["c_parent_id"]=> int(1) } [9]=> array(4) { ["c_id"]=> int(12) ["c_name"]=> string(6) "鞋子" ["c_status"]=> NULL ["c_parent_id"]=> int(1) } [10]=> array(4) { ["c_id"]=> int(13) ["c_name"]=> string(6) "干果" ["c_status"]=> NULL ["c_parent_id"]=> int(2) } [11]=> array(4) { ["c_id"]=> int(14) ["c_name"]=> string(6) "零食" ["c_status"]=> NULL ["c_parent_id"]=> int(2) } [12]=> array(4) { ["c_id"]=> int(15) ["c_name"]=> string(6) "特产" ["c_status"]=> NULL ["c_parent_id"]=> int(2) } [13]=> array(4) { ["c_id"]=> int(16) ["c_name"]=> string(6) "生鲜" ["c_status"]=> NULL ["c_parent_id"]=> int(2) } [14]=> array(4) { ["c_id"]=> int(17) ["c_name"]=> string(6) "饮品" ["c_status"]=> NULL ["c_parent_id"]=> int(2) } [15]=> array(4) { ["c_id"]=> int(18) ["c_name"]=> string(6) "家具" ["c_status"]=> NULL ["c_parent_id"]=> int(3) } [16]=> array(4) { ["c_id"]=> int(19) ["c_name"]=> string(6) "家纺" ["c_status"]=> NULL ["c_parent_id"]=> int(3) } [17]=> array(4) { ["c_id"]=> int(20) ["c_name"]=> string(6) "奶粉" ["c_status"]=> NULL ["c_parent_id"]=> int(4) } [18]=> array(4) { ["c_id"]=> int(21) ["c_name"]=> string(6) "玩具" ["c_status"]=> NULL ["c_parent_id"]=> int(4) } [19]=> array(4) { ["c_id"]=> int(22) ["c_name"]=> string(6) "用品" ["c_status"]=> NULL ["c_parent_id"]=> int(4) } [20]=> array(4) { ["c_id"]=> int(23) ["c_name"]=> string(6) "口红" ["c_status"]=> NULL ["c_parent_id"]=> int(5) } [21]=> array(4) { ["c_id"]=> int(24) ["c_name"]=> string(6) "面膜" ["c_status"]=> NULL ["c_parent_id"]=> int(5) } [22]=> array(4) { ["c_id"]=> int(25) ["c_name"]=> string(6) "保湿" ["c_status"]=> NULL ["c_parent_id"]=> int(5) } [23]=> array(4) { ["c_id"]=> int(26) ["c_name"]=> string(6) "卸妆" ["c_status"]=> NULL ["c_parent_id"]=> int(5) } }
现在只是查询出来了当前的所以分类
接下来就是调用无限极分类方法(传值)(记得将查询出来的所有分类传过去)进行无限极分类处理层级
例如:
public function Index() { //查询商品分类 $class = $this->goodsService->getClass(); //调用无限极分类方法getTrees $class_query = $this->goodsService->getTrees($class); //可以打印看一下 var_dump($class_query); } //无限极分类 public function getTrees($data,$pid=0){ $arr = []; foreach ($data as $k =>$v) { if ($pid==$v->c_parent_id) { $arr[$k] = $v; //这里将子分类存放在父级分类下给数组定义一个son存放子分类 $arr[$k]['son'] = $this->getTrees($data,$v->c_id); } } return $arr; }
打印效果如下
array(5) { [0]=> array(5) { ["c_id"]=> int(1) ["c_name"]=> string(6) "服饰" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) ["son"]=> array(5) { [5]=> array(5) { ["c_id"]=> int(8) ["c_name"]=> string(6) "男装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) ["son"]=> array(0) { } } [6]=> array(5) { ["c_id"]=> int(9) ["c_name"]=> string(6) "女装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) ["son"]=> array(0) { } } [7]=> array(5) { ["c_id"]=> int(10) ["c_name"]=> string(6) "童装" ["c_status"]=> NULL ["c_parent_id"]=> int(1) ["son"]=> array(0) { } } [8]=> array(5) { ["c_id"]=> int(11) ["c_name"]=> string(6) "内衣" ["c_status"]=> NULL ["c_parent_id"]=> int(1) ["son"]=> array(0) { } } [9]=> array(5) { ["c_id"]=> int(12) ["c_name"]=> string(6) "鞋子" ["c_status"]=> NULL ["c_parent_id"]=> int(1) ["son"]=> array(0) { } } } } [1]=> array(5) { ["c_id"]=> int(2) ["c_name"]=> string(6) "食品" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) ["son"]=> array(5) { [10]=> array(5) { ["c_id"]=> int(13) ["c_name"]=> string(6) "干果" ["c_status"]=> NULL ["c_parent_id"]=> int(2) ["son"]=> array(0) { } } [11]=> array(5) { ["c_id"]=> int(14) ["c_name"]=> string(6) "零食" ["c_status"]=> NULL ["c_parent_id"]=> int(2) ["son"]=> array(0) { } } [12]=> array(5) { ["c_id"]=> int(15) ["c_name"]=> string(6) "特产" ["c_status"]=> NULL ["c_parent_id"]=> int(2) ["son"]=> array(0) { } } [13]=> array(5) { ["c_id"]=> int(16) ["c_name"]=> string(6) "生鲜" ["c_status"]=> NULL ["c_parent_id"]=> int(2) ["son"]=> array(0) { } } [14]=> array(5) { ["c_id"]=> int(17) ["c_name"]=> string(6) "饮品" ["c_status"]=> NULL ["c_parent_id"]=> int(2) ["son"]=> array(0) { } } } } [2]=> array(5) { ["c_id"]=> int(3) ["c_name"]=> string(6) "家居" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) ["son"]=> array(2) { [15]=> array(5) { ["c_id"]=> int(18) ["c_name"]=> string(6) "家具" ["c_status"]=> NULL ["c_parent_id"]=> int(3) ["son"]=> array(0) { } } [16]=> array(5) { ["c_id"]=> int(19) ["c_name"]=> string(6) "家纺" ["c_status"]=> NULL ["c_parent_id"]=> int(3) ["son"]=> array(0) { } } } } [3]=> array(5) { ["c_id"]=> int(4) ["c_name"]=> string(6) "孕婴" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) ["son"]=> array(3) { [17]=> array(5) { ["c_id"]=> int(20) ["c_name"]=> string(6) "奶粉" ["c_status"]=> NULL ["c_parent_id"]=> int(4) ["son"]=> array(0) { } } [18]=> array(5) { ["c_id"]=> int(21) ["c_name"]=> string(6) "玩具" ["c_status"]=> NULL ["c_parent_id"]=> int(4) ["son"]=> array(0) { } } [19]=> array(5) { ["c_id"]=> int(22) ["c_name"]=> string(6) "用品" ["c_status"]=> NULL ["c_parent_id"]=> int(4) ["son"]=> array(0) { } } } } [4]=> array(5) { ["c_id"]=> int(5) ["c_name"]=> string(9) "化妆品" ["c_status"]=> int(1) ["c_parent_id"]=> int(0) ["son"]=> array(4) { [20]=> array(5) { ["c_id"]=> int(23) ["c_name"]=> string(6) "口红" ["c_status"]=> NULL ["c_parent_id"]=> int(5) ["son"]=> array(0) { } } [21]=> array(5) { ["c_id"]=> int(24) ["c_name"]=> string(6) "面膜" ["c_status"]=> NULL ["c_parent_id"]=> int(5) ["son"]=> array(0) { } } [22]=> array(5) { ["c_id"]=> int(25) ["c_name"]=> string(6) "保湿" ["c_status"]=> NULL ["c_parent_id"]=> int(5) ["son"]=> array(0) { } } [23]=> array(5) { ["c_id"]=> int(26) ["c_name"]=> string(6) "卸妆" ["c_status"]=> NULL ["c_parent_id"]=> int(5) ["son"]=> array(0) { } } } } }
此时无限极分类基本已经完成,前台HTML渲染
博主正在用laravel,故foreach带@循环对象,大家可以忽略@
<!--左侧栏目开始-->
<!--此时循环一级分类--> @foreach($class as $k => $v) <div class="menu_title">{{$v->c_name}}</div>
<!--此时循环子分类--> @foreach($v->son as $key => $value) <a href="Product_List.html">{{$value->c_name}}</a> @endforeach @endforeach
效果如图
PHP简单的无限极分类结束。