我一直在使用二进制mlm系统的网站上工作。
所以我在数据库中有两个表,用户和anad关系。用户中有ID和个人数据列。关系有4列:ID,parentID,childID,pos。 pos位于左侧或右侧。
我成功编写了一个递归列出给定pid(parentID)的所有子节点的函数。但是我需要在级别中对其进行排序(用于显示和计算目的)。
我有一组用户ID = 1的孩子:
Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[2] => Array
(
[id] => 8
[parentID] => 4
[pos] => l
)
[3] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[4] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
[5] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[6] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
现在我有一个名为get_levels的函数,它返回一个应该的多维数组:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
)
[1] => Array
(
[0] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[1] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[2] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[3] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
ETC.
)
这是功能:
function get_levels($pid,$level, $level_id){
$children = children_array($pid,1);
if (sizeof($children) > 0):
foreach ($children as $child):
if ($child["parentID"] == $pid):
get_levels($child["id"], $level, $level_id+1);
$level[$level_id][] = $child;
endif;
endforeach;
endif;
return $level;
}
function children_array($ pid,$ depth)返回子项...对于$ depth = 1,它返回直接子项(0或1或2),对于$ depth = 0,它返回所有子项
任何人都可以帮我这个功能吗?我认为该功能有效,但我不知道如何递归使用和添加到数组。
答案 0 :(得分:0)
看起来您在错误的上下文中使用数据结构。它是一个二叉树,但它被表示为一个多级数组,简而言之,它没有定义它的边界和使用规则。
使用树时,我会使用类似Node类的东西,左右两个孩子。通过树进行迭代将是小菜一碟,插入/删除/编辑很容易完成,具体取决于您要遵循的规则集。存储树时,我会使用某种Ahnentafel list,可以在关系数据库中轻松完成。
我绝不会混合迭代和存储过程,因为如果我改变存储规则,我可能还需要改变迭代规则,反之亦然。