简体   繁体   English

如何在PHP中创建树形视图?

[英]How create tree view in PHP?

I have array of users and every user can have parents: 我有很多用户,每个用户都可以有父母:

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

And I want to make tree view from this data. 我想根据这些数据制作树形视图。 The result should look like this: http://www.phorum.org/phorum5/file.php/62/3237/treeview_lightweight_admin_screenshot.jpg 结果应如下所示: http : //www.phorum.org/phorum5/file.php/62/3237/treeview_lightweight_admin_screenshot.jpg

The result will be: 结果将是:

- guest
    - member
        - user

- moderator
    - admin

EDIT: 编辑:

I tried to write tree generator, but i dont know how use recursion. 我试图写树生成器,但我不知道如何使用递归。

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

return: 返回:

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

left: 剩下:

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

You can active this by making the HTML builder method recursive . 您可以通过使HTML构建器方法递归来激活它。 Essentially, the method invokes itself with an incrementing level variable (level 1, 2, 3, 4..) until the ultimate level has been reached. 本质上,该方法使用递增级别变量(级别1、2、3、4 ..)来调用自身,直到达到最终级别。 Every level contributes to the HTML code, depending on the level. 每个级别都取决于HTML代码。 A typical example would be: 一个典型的例子是:

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

This is of course pseudo-code. 这当然是伪代码。 :) :)

If you want to debug you have some automatic views with var_dump($array) (for HTML render) or print_r($array) (plain text render). 如果要调试,则可以使用var_dump($array) (用于HTML渲染)或print_r($array) (纯文本渲染)来获得一些自动视图。 For a custom view you have to loop on your array and write your own HTML 对于自定义视图,您必须在数组上循环并编写自己的HTML

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM