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

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


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

blob.png


Step 2、SQL语句:

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


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

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

blob.png


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、处理后的数据如图:

blob.png


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、最终效果:

blob.png



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



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


--THE END--