2

再帰ビルドではない 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>';
?> 

誰かがこの問題を解決する方法を教えてくれることを願っています。

4

1 に答える 1

0

この式を使用して、行の値を計算します。($i / $rowspan + pow(2,$j+1) - 1)ここで、 は最初の行$i / $rowspanから始まる現在のレベルの行の番号であり、レベルの最初の値、つまり3 番目のレベルです。0pow(2,$j+1) - 17

$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>';

希望する結果を出力します。先生が私を嫌いにならないことを願っています!;-)

($i/$lines + 1 ) * pow(2,$j+1) - 1$rowspan に依存したくない場合は、行の値に代わりに使用できます。

于 2012-04-04T00:12:53.233 に答える