我正在尝试使用php创建动态网格(HTML表格)。
我需要制作一个每行5列的表,所有奇数列的宽度为32%,而偶数列为空,但宽度为2%,用作间隔符。
我也需要它,所以如果任何行没有3个奇数列,它必须生成其余的5,即使它们是空的。
我已设法做到这一点,因此它创建了3列32%宽度并添加空TD,如果它需要我还没有能够创建较小的2%列。
这将用作HTML电子邮件的表格网格
这就是我现在工作的但只有3列
<?php
$test = array(1,2,3,4,5);
$count = 0;
?>
<html>
<head>
<style>
.test {border: 1px solid #ccc;}
</style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" width="650">
<?php foreach($test as $t): ?>
<?php if ($count % 3 == 0) echo "<tr>"; # new row ?>
<td width="32%" class="test">
<p>ddfhfdhfgh</p>
<p>sdgdfgdgd</p>
</td>
<?php $count++; ?>
<?php if ($count % 3 == 0) echo "</tr>\n"; # end row ?>
<?php endforeach; ?>
<?php if ($count % 3 != 0): ?>
<?php while ($count++ % 3): ?>
<td width="32%"> </td>
<?php endwhile; ?>
</tr>
<?php endif; ?>
</table>
</body>
</html>
我尝试添加此功能,但它弄得一团糟。
<?php if ($count % 3 == 0) echo "<tr>"; # new row ?>
<?php if ( $count & 1 ): ?>
<td width="32%" class="test">
<p>ddfhfdhfgh</p>
<p>sdgdfgdgd</p>
</td>
<?php else: ?>
<td width="2%"> </td>
<?php endif; ?>
<?php $count++; ?>
我只需要一张包含3个大列和2个间隔列的表
答案 0 :(得分:1)
我认为这应该可以解决问题。
你让它变得比它需要的要复杂得多。
首先,您可以使用foreach
这样的foreach ($array as $index => $value)
语法,这样您就不需要保留自己的计数器了。
其次,您基本上希望每个其他列都采用不同的大小,因此请使用% 2
而不是% 3
和简单的if then else
构造。
如果你不使用围绕PHP的每一行的php启动和停止标签<?php ... ?>
,如果你有多行连续的php代码只使用一个来启动上面的解释器,它也会使代码更容易阅读第一行和最后一行PHP代码之后的一行。否则它会使大脑试图阅读并理解代码。
<?php
$test = array(1,2,3,4,5);
?>
<html>
<head>
<style>
.test {border: 1px solid #ccc;}
</style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" width="650">
<?php
echo '<tr>';
foreach($test as $i => $t):
if ( $i % 2 == 0 ) :
echo '<td width="32%" class="test">';
echo '<p>ddfhfdhfgh</p>';
echo '<p>sdgdfgdgd</p>';
echo '</td>';
else :
echo '<td width="2%" class="test"> </td>';
endif;
endforeach;
// if array has less than the expected 5 occ add blank columns
if ( $i < 5 ) :
$i++;
for ( $i ; $i < 5; $i++ ) :
if ( $i % 2 == 0 ) :
echo '<td width="32%" class="test">Filler</td>';
else :
echo '<td width="2%" class="test"> </td>';
endif;
endfor;
endif;
echo '</tr>';
?>
</table>
</body>
</html>