【问题标题】:Recursively sort array to levels递归地将数组排序到级别
【发布时间】:2010-12-11 04:37:34
【问题描述】:

我一直在开发一个使用二进制传销系统的网站。

Illustration here

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

谁能帮我实现这个功能?我认为该函数有效,但是 我不知道如何递归使用并添加到数组。

【问题讨论】:

    标签: php arrays recursion tree binary-tree


    【解决方案1】:

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

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

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

    【讨论】:

    • 我找到了这个二叉树类:phpclasses.org/browse/file/11713.html 在数据库中存储数据的最佳方式应该是什么? ID|parentID|leftChildID|rightChildID ?
    • 对于数据,如果没有其他方法可以弄清楚,我只会参考父级和位置。没有父节点的节点是根节点。
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2018-10-26
    • 2011-05-18
    • 2013-07-23
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多