これに似た他のいくつかの投稿を調べましたが、探しているものに合ったものが見つかりません...
8 チームのトーナメント ブラケット テーブルをハード コーディングすることができましたが、入力されたチーム数に基づいて for/if ステートメントを使用してテーブルを作成する方法が本当に必要です。
colspans と rowspans を使用して空白を作成するテーブルをハードコーディングするコードを次に示します (テーブルの代わりに CSS を使用すると言う前に、私は CSS についてよく知りませんが、テーブルには自信があります)。
<table border='1' cellspacing='1' cellpadding='1'>
<tr><td colspan='2' width='120'><b>Round 1</b></td></td><td colspan='2' width='120'><b>Round 2</b></td></td><td colspan='2' width='120'><b>Final</b></td><td width='120'><b>Winner</b></td></tr>
<tr><td colspan='2'> </td><td colspan='2' rowspan='2'></td><td colspan='2' rowspan='4'></td><td rowspan='8'></td></tr>
<tr><td>Group 1</td><td width='20'></td></tr>
<tr><td align='center'>Score 1</td><td></td><td>Round 1 Winner</td><td width='20'></td></tr>
<tr><td>Group 2</td><td></td><td rowspan='3' align='center'>Score 5</td><td></td></tr>
<tr><td colspan='2'></td><td></td><td>Round 2 Winner</td><td width='20'></td></tr>
<tr><td>Group 3</td><td></td><td></td><td rowspan='7' align='center'>Score 7</td><td></td></tr>
<tr><td align='center'>Score 2</td><td></td><td>Round 1 Winner<td></td><td></td></tr>
<tr><td>Group 4</td><td></td><td colspan='2' rowspan='3'></td><td></td></tr>
<tr><td colspan='2'></td><td></td><td>Champion</td></tr>
<tr><td>Group 5</td><td></td><td></td><td rowspan='8'></td></tr>
<tr><td align='center'>Score 3</td><td></td><td>Round 1 Winner</td><td></td><td></td></tr>
<tr><td>Group 6</td><td></td><td rowspan='3' align='center'>Score 6</td><td></td><td></td></tr>
<tr><td colspan='2'></td><td></td><td>Round 2 Winner</td><td></td></tr>
<tr><td>Group 7</td><td></td><td></td><td colspan='2' rowspan='3'></td></tr>
<tr><td align='center'>Score 4</td><td></td><td>Round 1 Winner</td><td></td></tr>
<tr><td>Group 8</td><td></td><td colspan='2'></td></tr>
</table>
これはそれが生成するものです:
これまでのところ、for ステートメントと if ステートメントを使用して上記を作成しようとしています。最初の列にチーム名がリストされているところまで来ましたが、この時点から何をする必要があるかわかりません.. .
<?php
echo "<table border='1' cellspacing='1' cellpadding='1'>";
$num_teams = 8;
$nRounds = floor(log($num_teams,2));
$max_rows = $num_teams*2;
for ($row = 0; $row <= $max_rows; $row++)
{
echo "<tr>";
if ($row == 0)
{
for ($i = 1; $i <= $nRounds+1; $i++)
{
if($i < $nRounds)
{
echo "<td width='120'><b>Round ".$i."</b></td>";
echo "<td width='20'></td>";
}
elseif($i == $nRounds)
{
echo "<td width='120'><b>Final</b></td>";
echo "<td width='20'></td>";
}
else
{
echo "<td width='120'><b>Winner</b></td>";
}
}
}
elseif($row == 1)
{
$rowwhitespace = ($nRounds*2)+1;
echo "<td colspan='".$rowwhitespace."'> </td>";
}
else
{
$rowwhitespace = ($nRounds*2);
for ($i = 1; $i <= $num_teams; $i++)
{
if($i == $row/2)
{
echo "<td>Group ".$i."</td>";
echo "<td colspan='".$rowwhitespace."'></td>";
}
}
}
echo "</tr>";
}
echo "</table>";
?>
そして、これが次のようになります。
最終的に、チーム名、スコア、および勝者は DB から取得されるため、構造を正しくレイアウトできるようになったら、それを組み込む必要があります。
また、16 チーム、32 チーム、64 チームのテーブルを作成するには時間がかかるため、手動でハードコードされたテーブルを使用せずに、64 チームまで拡張可能で、その数のチームに基づいてテーブルを自動的に描画できるようにしたいと考えています。最大 64 チームのダブル エリミネーションを考慮すると、手動でコーディングするのは大変な仕事になります!
これに関するポインタや支援は大歓迎です!