利用两个for循环实现无限级分类
表:
| 字段名 | 字段类型 | 备注 | 默认值 |
|---|---|---|---|
| id | int | 主键 auto-increment | |
| name | varchar | 分类名称 | |
| pid | int | 父类id | 0 |
1. 构建数据
$categories = array(
array('id'=>1,'name'=>'电脑','pid'=>0),
array('id'=>2,'name'=>'手机','pid'=>0),
array('id'=>3,'name'=>'笔记本','pid'=>1),
array('id'=>4,'name'=>'台式机','pid'=>1),
array('id'=>5,'name'=>'智能机','pid'=>2),
array('id'=>6,'name'=>'功能机','pid'=>2),
array('id'=>7,'name'=>'超级本','pid'=>3),
array('id'=>8,'name'=>'游戏本','pid'=>3),
);
目标是将它转化为下面这种结构
电脑 >笔记本 >>超级本 >> 游戏本 > 台式机
手机 > 智能机 > 功能机
2. 处理过程:
原文 http://blog.youkuaiyun.com/u013927110/article/details/44086253$tree = array(); //第一步,将所有的分类id作为数组key,并创建children单元 foreach($categories as $category){ $tree[$category['id']] = $category; $tree[$category['id']]['children'] = array(); } //第二步,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。 foreach ($tree as $key=>$value) { if ($value['pid'] != 0) { $tree[$value['pid']]['children'][] = &$tree[$key]; } } print_r($tree);class Category {
static public functionsortOut($cate,$pid=0,$level=0,$html='--'){
$tree = array();
foreach($cate as $v){
if($v['id'] == $pid){
$v['level'] = $level + 1;
$v['html'] = str_repeat($html, $level);
$tree[] = $v;
$tree = array_merge($tree,self::sortOut($cate,$v['id'],$level+1,$html));
}
}
return $tree;
}
}
function tree(&$list,$pid=0,$level=0,$html='--'){
static $tree= array();
foreach($list as $v){
if($v['pid'] == $pid){
$v['sort'] = $level;
$v['html'] = str_repeat($html,$level);
$tree[] = $v;
tree($list,$v['id'],$level+1);
}
}
return$tree;
}
本文介绍了如何使用PHP通过递归方法实现无限级分类。通过构建数据和递归处理,可以将扁平化的分类数据转化为多级结构,例如电脑 > 笔记本 > 超级本 > 游戏本 > 台式机,手机 > 智能机 > 功能机。
977

被折叠的 条评论
为什么被折叠?



