使用PHP生成“Sudoku like”HTML表

时间:2010-11-18 23:27:32

标签: php html html-table

这是一个非常简单的Sudoku like HTML table

我想要的是用PHP生成这个,考虑以下内容。

每个单元格应该如下(或类似):

<!-- Position "a1" -->

<?php
if ($a1_pos_txt !== TRUE){

    echo "<td>" . $numbers["a1_pos"] . "</td>";

}else{

?>

<td><input type="text" name="a1_post" size="1" maxlength="1" /></td>

<?php   
}
?>

这显然是“a1”细胞。

以防万一,“c4”和“f9”应该看起来像THIS

因此,PHP生成的表应该看起来像THIS,依此类推所有行。

正如我所说,并且不想复制和粘贴此代码并将a1替换为a2等等81次,我希望他的表和变量能够用PHP动态生成。

我尽量使用我能提供的所有代码尽可能清楚,但请询问您是否需要澄清!!!

注意:很抱歉变量中的糟糕选择($a1_pos_txt$a1_posa1_post)没有顶点友好:)

2 个答案:

答案 0 :(得分:3)

这应该这样做:

$lit = range('A', 'J');
echo '<table border="1">';
for($y = 0; $y < 9; $y++) {
    echo '<tr>';
    for($x = 0; $x < 9; $x++) {
        $block = floor($x / 3) + floor($y / 3) * 3;
        $cell  = ($x % 3 + 1) + ($y % 3) * 3;
        echo '<td>'.$lit[$block].$cell.'</td>';
    }
    echo '</tr>';
}
echo '</table>';

输出:

A1 A2 A3 B1 B2 B3 C1 C2 C3
A4 A5 A6 B4 B5 B6 C4 C5 C6
A7 A8 A9 B7 B8 B9 C7 C8 C9
D1 D2 D3 E1 E2 E3 F1 F2 F3
D4 D5 D6 E4 E5 E6 F4 F5 F6
D7 D8 D9 E7 E8 E9 F7 F8 F9
G1 G2 G3 H1 H2 H3 I1 I2 I3
G4 G5 G6 H4 H5 H6 I4 I5 I6
G7 G8 G9 H7 H8 H9 I7 I8 I9

可能可以简化一下,但应该给你你需要的东西。 $block是当前的3x3网格,$cell是该网格中的单元格编号。

修改

我检查了你的例子,这可能不是你想要的。显然你想要A代表第一行,B代表第二行等,而不是每3x3块。以下是您可以这样做的方法:

echo '<table border="1">';
foreach(range('A', 'J') as $y) {
    echo '<tr>';
    for($x = 1; $x <= 9; $x++) {
        echo '<td>'.$y.$x.'</td>';
    }
    echo '</tr>';
}
echo '</table>';

输出:

A1 A2 A3 A4 A5 A6 A7 A8 A9
B1 B2 B3 B4 B5 B6 B7 B8 B9
C1 C2 C3 C4 C5 C6 C7 C8 C9
D1 D2 D3 D4 D5 D6 D7 D8 D9
E1 E2 E3 E4 E5 E6 E7 E8 E9
F1 F2 F3 F4 F5 F6 F7 F8 F9
G1 G2 G3 G4 G5 G6 G7 G8 G9
H1 H2 H3 H4 H5 H6 H7 H8 H9
I1 I2 I3 I4 I5 I6 I7 I8 I9
J1 J2 J3 J4 J5 J6 J7 J8 J9

答案 1 :(得分:0)

PHP支持数组(或矩阵)数组。创建一个从0到8的数组,每个值也应该是一个0到8的数组。

构建9x9矩阵时 - 确定要回答的值并将其设置为true $answers[1][3] = true

然后创建2个for循环并打印出整个表格。你的forter for循环也必须打印<tr>标签。