PHP mysql输出组织结构图/树层次结构

时间:2014-07-28 16:03:00

标签: javascript php jquery mysql

我想输出我的数据库记录

UserName     Placement      Position    
Jimmy                       left
JLO          Jimmy          left
Shinobi      JLO            left
trialuser4   JLO            right
donald_duck  trialuser4     left
minnie_mouse donald_duck    left
mickeymouse  donald_duck    right
dr_octopus   mickeymouse    left
dr_cucumber  dr_octopus     left
mr_brown111  dr_octopus     right

如果我的树以JLO开头,我想像

那样输出它
JLO
    Shinobi
    trialuser4
        donald_duck
            minnie_mouse
            mickeymouse
                dr_octopus
                    dr_cucumber
                    mr_brown111

但是使用mysql和php,如何绘制记录并输出它就像我的jsFiddle html代码一样。

感谢您帮助&启发!

1 个答案:

答案 0 :(得分:0)

我们可以首先构建一个表示层次结构的嵌套数组。然后递归打印出列表标签:

$rows = array(
    array('UserName' => 'Jimmy', 'Placement' => '', 'Position' => 'left'),
    array('UserName' => 'JLO', 'Placement' => 'Jimmy', 'Position' => 'left'),
    array('UserName' => 'Shinobi', 'Placement' => 'JLO', 'Position' => 'left'),
    array('UserName' => 'trialuser4', 'Placement' => 'JLO', 'Position' => 'right'),
    array('UserName' => 'donald_duck', 'Placement' => 'trialuser4', 'Position' => 'left'),
    array('UserName' => 'minnie_mouse', 'Placement' => 'donald_duck', 'Position' => 'left'),
    array('UserName' => 'mickeymouse', 'Placement' => 'donald_duck', 'Position' => 'right'),
    array('UserName' => 'dr_octopus', 'Placement' => 'mickeymouse', 'Position' => 'left'),
    array('UserName' => 'dr_cucumber', 'Placement' => 'dr_octopus', 'Position' => 'left'),
    array('UserName' => 'mr_brown111', 'Placement' => 'dr_octopus', 'Position' => 'right'),
);

$nested_lists = array();
$user_lists = array();
foreach ($rows as $row) {
    $placement = $row['Placement'];
    $user = $row['UserName'];

    if ($placement == '') {
        $nested_lists[$user] = array();
        $user_lists[$user] = &$nested_lists[$user];
    } else {
        $pointer = &$user_lists[$placement];
        $pointer[$user] = array();
        $user_lists[$user] = &$pointer[$user];
    }
}

function build_list($arr)
{
    if (count($arr) == 0) {
        return '';
    }

    $html = "<ul>";
    foreach ($arr as $k => $v) {
        $html .= "<li>$k" . build_list($v) . "</li>";
    }
    $html .= "</ul>";
    return $html;
}

echo build_list($nested_lists['Jimmy']);

打印

  • JLO
    • trialuser4
      • donald_duck
        • minnie_mouse
        • 米老鼠
          • dr_octopus
            • dr_cucumber
            • mr_brown111