2010-11-18 88 views
1

这是一个非常简单的Sudoku like HTML table用PHP生成“Sudoku like”HTML表格

我想要的是用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)没有VERT友好:)

回答

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 
+0

哇,看起来非常好,我一定会给它一个!谢谢!!! – Trufa 2010-11-18 23:44:03

+0

感谢您的更新,我试图将其应用于此。谢谢!! – Trufa 2010-11-19 00:06:09

+0

唯一的是我真正想要生成的不是“a1”“b2”的例子我特别为这种情况修改你的代码,感谢把我放在正确的方向。 – Trufa 2010-11-19 00:13:40

0

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

当你的9x9的矩阵构造 - 找出你想要得到回答并设置那些真正$answers[1][3] = true

哪些值

然后创建2个for-loops并打印出整个表格。你的outter for loop将不得不打印<tr>标签。

+0

好,谢谢,我想我明白你的做法,但我不确定你的意思是:“找出你想要哪个值回答“对不起,谢谢! – Trufa 2010-11-18 23:37:17