下面的讲解我用的是ThinkPHP框架,与PHP用法是一样的。
Step 1、数据表中主要字段是id、parent_id
Step 2、SQL语句:
代码语言:javascript复制SELECT * FROM `t_class` WHERE ( is_delete=0 ) ORDER BY parent_id ASC,id ASC //这里的排序是至关重要的
Step 3、查询出的结果是一个常规的二维数组,如下图:
ps:pid就是parent_id,这里是举个例子,下文一样
Step 4、封装的无限级分类数组处理函数:
代码语言:javascript复制/**
* 无限级分类
*
* @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、应用封装的函数
代码语言:javascript复制$data = self::tree($data); //注意传递的参数(括号中的)$data为你从数据库中查询到的数组
Step 6、处理后的数据如图:
Step 7、模板中的实现:
代码语言:javascript复制<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">
</for>├
</if>
{$dlist.class_name}
</option>
</volist>
</select>
Step 8、最终效果:
到这里就实现了一个无限下级的效果,这个函数是我从互联网上看到借鉴的,进行了一些修改,希望能够帮助大家解决工作或者学习中遇到的困难,不管是PHP还是thinkphp,用法其实一样,如果此文存在错或者有不懂的地方,可以在下方评论栏留言,我将为您解答!
版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编], 转载请备注出处:http://www.sindsun.com/article-details-21.html [若此文确切存在侵权,请联系本站管理员进行删除!]