2012-07-13 167 views
0

我有用户的数组,每个用户都可以有父母:如何在PHP中创建树视图?

array(6) { 
    guest => NULL 
    moderator => NULL 
    member => array(1) [ //username 
     0 => "guest" (5) //parent 
    ] 
    user => array(1) [ 
     0 => "member" (6) 
    ] 
    admin => array(1) [ 
     0 => "moderator" (9) 
    ] 
} 

而且我要让从这个数据树视图。结果应该是这样的:http://www.phorum.org/phorum5/file.php/62/3237/treeview_lightweight_admin_screenshot.jpg

结果将是:

- guest 
    - member 
     - user 

- moderator 
    - admin 

编辑:

我试着写树生成器,但我不知道如何使用递归。

private function generateTree($node) 
{ 
    $return = array(); 
    if(is_array($node)) 
    { 
     foreach($node as $user => $parents) 
     { 
      if(is_null($parents)) 
      { 
       $return[$user] = null; 
      } 
      if(is_array($parents)) 
      { 
       foreach($parents as $parent) 
       { 
        if(array_key_exists($parent, $return)) 
        { 
         $return[$parent] = $user; 
        } 
        else 
        { 
         dump($user, $parent); 
        } 
       } 
      } 
     } 
    } 
    return $return; 
} 

回报:

array(2) { 
    guest => "member" (6) 
    moderator => "admin" (5) 
} 

左:

user => array(1) [ 
     0 => "member" (6) 
    ] 
+0

你几乎已经描述了该怎么做:打印出数组recursevly并添加CSS样式。 – Peon 2012-07-13 13:04:06

回答

0

如果你想调试你有var_dump($array)(对于HTML渲染)或print_r($array)(纯文本渲染)一些自动的看法。 对于自定义视图,您必须循环访问阵列并编写自己的HTML

+0

我想制作自定义视图,但如果树的深度不止一个,我不知道如何制作它。 – user1518183 2012-07-13 13:05:32

1

您可以通过制作HTML构建器方法recursive来激活此功能。实质上,该方法使用增量级别变量(级别1,2,3,4 ...)自行调用,直到达到最终级别。每个级别都对HTML代码有贡献,具体取决于级别。一个典型的例子是:

function render($treeData, &$html, $level = 0) { 
    foreach ($treeData->branches as $branch) { 
     render($branch, $level + 1); 
    } 

    $html .= '<div class="section-level-'.$level.'">'.$treeData->currentLevelData.'</div>'; 
} 

$html = ''; 
render($treeData, $html); 

这当然是伪代码。 :)