PHP无限级分类函数封装与应用

下面的讲解我用的是ThinkPHP框架,与PHP用法是一样的。

Step 1、数据表中主要字段是id、parent_id

Step 2、SQL语句:

SELECT * FROM `t_class` WHERE (  is_delete=0  ) ORDER BY parent_id ASC,id ASC        //这里的排序是至关重要的

Step 3、查询出的结果是一个常规的二维数组,如下图:

ps:pid就是parent_id,这里是举个例子,下文一样

Step 4、封装的无限级分类数组处理函数:

/**
     * 无限级分类
     *
     * @access public
     * @param Array $data
     *            //数据库里获取的结果集
     * @param Int $pid
     * @param Int $count
     *            //第几级分类
     * @return Array $treeList
     */
     // 存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
    public static $treeList = array();
    static public function tree(&$data, $pid = 0, $count = 1)
    {
        foreach ($data as $key => $value) {
            if ($value['parent_id'] == $pid) {
                $value['Count'] = $count;
                self::$treeList[] = $value;
                unset($data[$key]);
                self::tree($data, $value['id'], $count + 1);
            }
        }
        return self::$treeList;
    }

Step 5、应用封装的函数

$data = self::tree($data);    //注意传递的参数(括号中的)$data为你从数据库中查询到的数组

Step 6、处理后的数据如图:

Step 7、模板中的实现:

<select class="select" id="sel_Sub" name="sel_Sub">
    <option value="0">顶级分类</option>
    <volist name="catTree" id="dlist" key="k" >
        <option value="{$dlist.id}">
	<if condition="$dlist['Count'] gt 1" >
	     <for start="0" end="$dlist['Count']" name="is">
		&nbsp;&nbsp;
	    </for>├ 
	</if>
	{$dlist.class_name}
	</option>
	</volist>
</select>

Step 8、最终效果:

    到这里就实现了一个无限下级的效果,这个函数是我从互联网上看到借鉴的,进行了一些修改,希望能够帮助大家解决工作或者学习中遇到的困难,不管是PHP还是thinkphp,用法其实一样,如果此文存在错或者有不懂的地方,可以在下方评论栏留言,我将为您解答!

版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编], 转载请备注出处:http://www.sindsun.com/article-details-21.html [若此文确切存在侵权,请联系本站管理员进行删除!]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏对角另一面

lodash源码分析之自减的两种形式

本文为读 lodash 源码的第六篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

220100
来自专栏木头编程 - moTzxx

ThinkPHP 框架下 BaseModel 类整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

16520
来自专栏Jed的技术阶梯

Hive窗口函数01-SUM、MIN、MAX、AVG

order by : 在同一个组内,先累加完相同createtime的pv,再累加其他createtime的pv, 比如 : 现在在表末尾加一条数据cooki...

42930
来自专栏用户2442861的专栏

STL map, hash_map , unordered_map区别、对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

59250
来自专栏一“技”之长

一个移动开发者的Mock数据之路 原

    在前端开发中,很大一部分工作都是将后台数据获取到后展示在前端界面上。如果接口是现成的,这个过程还相对容易一些,但是如果接口的开发和前端开发是同时进行的,...

7710
来自专栏JetpropelledSnake

Vue学习笔记之计算属性和侦听器

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:

11530
来自专栏Felix的技术分享

《自制搜索引擎》笔记

56630
来自专栏技术沉淀

命令行工具:awk文本处理

18430
来自专栏HansBug's Lab

1293: [SCOI2009]生日礼物

1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1096  Solv...

28470
来自专栏Web 开发

做wordpress CMS必须用到的强力代码(转)

这个代码很强力,做一个wordpress cms的索引页面(index.php) 这个代码是必须要会使用,不然会走很多弯路。

11320

扫码关注云+社区

领取腾讯云代金券