代码之家  ›  专栏  ›  技术社区  ›  Smaug

将数组递归排序到级别

  •  0
  • Smaug  · 技术社区  · 16 年前

    Illustration here

    所以我在数据库中有两个表,用户和关系。用户中有ID和个人数据列。关系有4列:ID、parentID、childID、pos。其中pos为左或右。

    我有一个用户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
            )
    
    )
    

    应该 像这样:

    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;
     }
    

    函数children\u array($pid,$depth)返回子函数。。。对于$depth=1,它返回直接子级(0或1或2),对于$depth=0,它返回所有子级

    有人能帮我做这个功能吗?不过,我认为这个功能是有效的

    1 回复  |  直到 8 年前
        1
  •  0
  •   Percutio    16 年前

    当使用树时,我会使用类似于节点类的东西,它有两个子类,左和右。遍历树很容易,插入/删除/编辑到树中很容易,这取决于您希望遵循的规则集。当储存这棵树时,我会使用一些 Ahnentafel list

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