0

我有一系列用户,每个用户都可以有父母:

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)
    ]
4

2 回答 2

1

您可以通过使 HTML builder 方法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);

这当然是伪代码。:)

于 2012-07-13T13:10:04.200 回答
0

如果你想调试,你有一些带有var_dump($array)(用于 HTML 渲染)或print_r($array)(纯文本渲染)的自动视图。对于自定义视图,您必须在数组上循环并编写自己的 HTML

于 2012-07-13T13:03:08.957 回答