从数组中以表格格式打印树

时间:2017-07-27 18:04:28

标签: php arrays binary-tree

您好我正在尝试以下面的表格格式打印一个具有节点值和深度参数的数组作为树。

我的当前代码将以下面的树视图格式打印:

<div id="container"></div>

示例数组:

if(count($nodes) > 0){
    $depth = -1;
    $flag = false;
    foreach ($nodes as $row) {
        while ($row->depth > $depth) {
            echo "<ul><li><a href='javascript:void(0);'>";
            $flag = false;
            $depth++;
        }
        while ($row->depth < $depth) {
            echo "</a></li></ul>";
            $depth--;
        }
        if ($flag) {
            echo "</a></li><li><a href='javascript:void(0);'>";
            $flag = false;
        }
        echo $row->name.'<button type="button" class="btn btn-danger margin-left-20 removeBtn" data-name="'.$row->name.'">Delete</button>' ;
        $flag = true;
    }
    while ($depth-- > -1) {
        echo "</a></li></ul>";
    }
}else{
    echo '<div class="alert alert-warning"><strong>Warning!</strong> There were no nodes in the tree!</div>';
}

我可以在普通的树状视图中打印,但是当我尝试以表格格式打印时,我无法以某种方式进行打印。

预期格式:

表第一行12 [0]整行

表格第二行将由13 [1]和14 [1]

共享

表格第三行将由25 [2],20 [2]和21 [] 2

共享

第四行将由16 [3],23 [3]和24 [3]

共享

因此逻辑是表的每一行将由相同的深度节点值平均共享。

1 个答案:

答案 0 :(得分:1)

首先按depth创建唯一数组作为键。

$temp_nodes = [];

if (count($nodes) > 0) {
    foreach ($nodes as $key => $row) {
        $temp_nodes[$row->depth][] = $row;
    }
}

上面的代码将使得具有独特深度的数组成为关键&amp;该阵列下的所有相同深度记录。然后迭代阵列&amp;显示:

foreach ($temp_nodes as $key => $temp_node) {
    foreach ($temp_node as $node) {
       echo "$node->value [$key]";
    }
    echo "<br>";
}

输出:

12 [0]
13 [1]14 [1]
25 [2]20 [2]21 [2]16 [2]
23 [3]24 [3]