我有一个来自数据库的记录,包含id和name,我希望它输出 在一个colspan上,其中所有记录都以1-2-1-2-4的方式分发。我提供http://imageshack.us/photo/my-images/42/wrongb.png/的程序列表如下:
<table border="1" cellspacing="0" cellpadding="0" width="200">
$itemCount = 0;
$itemIndex = 0;
$colSpan = 0;
$itemColCount = 0;
while ($itemCount < $total) { // $row = mysql_fetch_array($result)
$row = mysql_fetch_array($result)
<tr>
if ($itemIndex == 0 || $itemIndex == 2)
{
$colSpan=4;
$itemColCount = 1;
$itemIndex++;
}
else if ($itemIndex == 1 || $itemIndex == 3) {
$colSpan=2;
$itemColCount = 2;
$itemIndex++;
}
else {
$colSpan=0;
$itemColCount = 4;
$itemIndex = 0;
}
while ($itemColCount > 0)
{
if ($colSpan > 0)
{
print "<td colspan=\"$colSpan\">$itemCount".$row['name']."</td>"; // $row['itemName']
}
else
{
print "<td>item$itemCount".$row['name']."</td>"; // $row['itemName']
}
$itemCount++;
$itemColCount--;
}
$itemColCount = 0;
$colSpan = 0;
print "\n";
</tr>
}
</table>
我需要有关如何实现所需程序输出的帮助。我需要完成的是http://img828.imageshack.us/img828/4411/correctj.png。
答案 0 :(得分:0)
由于您的表似乎有一个非常具体的布局,我建议您只是将数据放入预定义的模板,而不是使用条件检查来动态确定要打印的内容。作为副作用,它变得更容易阅读和使用。
您需要先将行数据临时保存到数组中,以便可以一次访问所有数据,而不是以mysql结果集的线性方式运行。如果结果集的大小发生变化,这种方法会中断,但原始解决方案也会发生变化。
while($row = mysql_fetch_array($result)) {
$data[] = $row;
}
print
'<table border="1" cellspacing="0" cellpadding="0" width="200">
<tr><td colspan="4">'.$data[0]['name'].'</td></tr>
<tr><td colspan="2">'.$data[1]['name'].'</td>
<td colspan="2">'.$data[2]['name'].'</td></tr>
<tr><td colspan="4">'.$data[3]['name'].'</td></tr>
<tr><td colspan="2">'.$data[4]['name'].'</td>
<td colspan="4">'.$data[5]['name'].'</td></tr>
<tr><td>'.$data[6]['name'].'</td>
<td>'.$data[7]['name'].'</td>
<td>'.$data[8]['name'].'</td>
<td>'.$data[9]['name'].'</td></tr>
';
如果可能的话,最好从数据库返回一行中的数据,以便您可以访问一行中的列,而不是10行中的一列。那么你就不会遇到依赖条件来产生html的情况。如果您也是DB端的作者,您应该考虑这一点。如果DB不在您的控制之下,那么您只需要处理它就可以了。