自己试着写了个无限级分类的,结果有些问题,想了很长时间了,感觉代码没问题呀,可就是结果不正确。现在整个人都懵了....
网上的栗子看了些,貌似写法跟我的不一样。
数组结构如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 代码
[parent] => 0
)
[1] => Array
(
[id] => 3
[name] => 动漫
[parent] => 0
)
[2] => Array
(
[id] => 4
[name] => 治愈
[parent] => 3
)
[3] => Array
(
[id] => 5
[name] => 励志
[parent] => 3
)
[4] => Array
(
[id] => 6
[name] => 机战
[parent] => 3
)
[5] => Array
(
[id] => 7
[name] => 百合
[parent] => 3
)
[6] => Array
(
[id] => 8
[name] => 资源
[parent] => 0
)
[7] => Array
(
[id] => 9
[name] => app
[parent] => 8
)
[8] => Array
(
[id] => 10
[name] => 软件
[parent] => 8
)
[9] => Array
(
[id] => 11
[name] => 黑科技
[parent] => 8
)
)
其中 id
为分类唯一ID, parent
为父类ID
我写的代码 如下:
function all($id=0){
static $_class = null;
if(is_null($_class))
$_class = select(); //这个得出来的就是以上的数组结构,然后赋值给了`$_class`变量
$result = array();
foreach($_class as $k => $v){
if($v['parent'] == $id){
unset($_class[$k]);
$v = array_merge($v, $this->all($v['id']));
$result['child'][] = $v;
}
}
return $result;
}
print_r(all(0));
鉴于你这个还是用的递归来完成的,我这里提供2个方法,一个是递归的,一个是指针形态的。
第二个可能您暂时无法理解,但是为帮助您学习,以及方便到他人,以下是代码:
使用递归
使用PHP的指针特性
使用
传入你的上述数组,比如最顶层的ID为0
结果
如果是分类的无限级,我一般会多用几个字段对数据组织有帮助。
一般会有 parantId, child, parantArr, childArr 四个字段。
parentId 是父级 ID
child 是判断是否有子级
parentArr 是父级链
childArr 是子级群
给个数据样本
通常我用于地区,分类,菜单等数据。好处么,显而易见的。另外二叉树的无限级也一样。缺点也有,比如更改某个子级到另一个父级时所有相关的父级子级数据更新,开销不算小,不过一般不会频繁改动不是吗?。
unset($_class[$k]);
这一行去掉