递归地将数组排序到级别

时间:2009-10-29 10:19:19

标签: php arrays recursion tree binary-tree

我一直在使用二进制mlm系统的网站上工作。

Illustration here

所以我在数据库中有两个表,用户和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,它返回所有子项

任何人都可以帮我这个功能吗?我认为该功能有效,但我不知道如何递归使用和添加到数组。

1 个答案:

答案 0 :(得分:0)

看起来您在错误的上下文中使用数据结构。它是一个二叉树,但它被表示为一个多级数组,简而言之,它没有定义它的边界和使用规则。

使用树时,我会使用类似Node类的东西,左右两个孩子。通过树进行迭代将是小菜一碟,插入/删除/编辑很容易完成,具体取决于您要遵循的规则集。存储树时,我会使用某种Ahnentafel list,可以在关系数据库中轻松完成。

我绝不会混合迭代和存储过程,因为如果我改变存储规则,我可能还需要改变迭代规则,反之亦然。