我使用以下代码在php中生成一个表。
<?PHP
while ($row = $mydata->fetch())
{
$tests[] = array(
'a' => $row['a'],
'b' => $row['b']
)
;
}
?>
然后输出代码
<table>
<tbody>
<tr><th>#</th><th>a</th><th>b</th></tr>
<?php foreach ($tests as $test): ?>
<tr class="">
<td></td>
<td><?php htmlout($test['a']); ?></td>
<td><?php htmlout($test['b']); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
输出
<table>
<tbody>
<tr><th>#</th><th>a</th><th>b</th></tr>
<tr class="">
<td></td><td>a content</td><td>b content</td>
</tr>
<tr class="">
<td></td><td>a content</td><td>b content</td>
</tr>
</tbody>
</table>
htmlout是以下自定义函数。
<?php
function html($text)
{
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
function htmlout($text)
{
echo html($text);
}
?>
这一切都运作良好但我在这里找不到两件事。
<tr class="odd">
和<tr class="even">
<td></td>
中的第一个<tr>
计算显示数据的行号,例如第二个中的第一个<td>1</td>
中的<tr class=""> <td>2</td>
等。我已经看过很多这样的例子
$count = 1;
while ($count <= 10)
{
echo "$count ";
++$count;
}
但是无法弄清楚如何将它实现到我的示例中,或者我应该使用其他方法。我知道我可以在jQuery中使用css3在某些浏览器中执行表行,但在这种情况下更喜欢使用php解决方案。
答案 0 :(得分:5)
您可以使用以下内容:
<?php foreach ($tests as $i => $test): ?>
<?php $class = ($i % 2 == 0) ? 'even' : 'odd'; ?>
<tr class="<?php echo $class; ?>">
<td><?php echo $i + 1; ?></td>
<td><?php htmlout($test['a']); ?></td>
<td><?php htmlout($test['b']); ?></td>
</tr>
<?php endforeach; ?>
这充分利用了数组保留数字索引$i
的事实。因此,行号实际上是$i + 1
,我们将其放入第一列。然后,我们根据$i
是否可被2整除来确定当前行是偶数还是奇数。如果$i
可被2整除,则它是偶数行,否则它&# 39;是一个奇怪的行。我们将类字符串保存在$class
中,并将其放在<tr>
标记中。
答案 1 :(得分:0)
您需要做的就是添加一个循环计数器。
<?php $counter = 0 ?>
<table>
<tbody>
<tr><th>#</th><th>a</th><th>b</th></tr>
<?php foreach ($tests as $test): ?>
<tr class="<?= ($counter % 2 == 0) ? 'even' : 'odd' ?>">
<td><?php echo ($counter+1) ?></td>
<td><?php htmlout($test['a']); ?></td>
<td><?php htmlout($test['b']); ?></td>
</tr>
<?php $counter++ ?>
<?php endforeach; ?>
</tbody>
</table>
答案 2 :(得分:0)
解决此问题的最简单方法可能是从foreach语句切换到for循环。使用计数器上的模数运算符应该很适合你。
<table>
<tbody>
<tr><th>#</th><th>a</th><th>b</th></tr>
<?php for( $counter = 0; $counter < count( $tests ); $tests++ ): ?>
<tr class="<? ( $counter % 2 ) ? echo "even" : echo "odd"; ?>">
<td><? echo $counter + 1; ?></td>
<td><?php htmlout($tests[$counter]['a']); ?></td>
<td><?php htmlout($tests[$counter]['b']); ?></td>
</tr>
<?php endfor; ?>
</tbody>
</table>