我尝试创建一个二进制树作为html-table,这不是递归构建。字段的顺序应如下所示:
C1 C2 C3
7
3
8
1
9
4
10
11
5
12
2
13
6
14
C1代表col 1,C2代表col2等。 以下代码以递归方式创建表,但这不是我想要的!
<?php
$cols = 4;
$counter = 0;
$lines = pow(2,$cols);
echo '<table border=1 style="border:1px solid black;"> ';
for($i = 0; $i < $lines; $i++){
echo '<tr>';
for($j = 0; $j < $cols; $j++){
$rowspan = $lines/pow(2,$j+1);
if(0 === $i%$rowspan) {
$counter++;
echo '<td rowspan='.$rowspan.'>'.$counter;
}
}
}
echo '</table>';
?>
我希望有人能给我一个如何解决这个问题的提示。
答案 0 :(得分:0)
使用此表达式计算行的值:($i / $rowspan + pow(2,$j+1) - 1)
其中$i / $rowspan
是当前级别中第一行0
开头的行号pow(2,$j+1) - 1
是级别的第一个值,即第三级的7
。
$cols = 4;
$lines = pow(2,$cols);
echo '<table border=1 style="border:1px solid black;">';
for($i = 0; $i < $lines; $i++){
echo '<tr>';
for($j = 0; $j < $cols; $j++){
$rowspan = $lines/pow(2,$j+1);
if(0 === $i%$rowspan) {
echo "<td rowspan='$rowspan'>".
($i/$rowspan + pow(2,$j+1)-1).
"</td>";
}
}
}
echo '</table>';
输出您想要的结果。希望你的老师现在不要恨我! ; - )
如果您不想依赖$ rowspan,则可以替代地使用($i/$lines + 1 ) * pow(2,$j+1) - 1
作为行的值。