将行号和奇数/偶数类添加到php表

时间:2012-07-28 00:40:11

标签: php mysql

  

可能重复:
  php: how to add odd/even loop in array

我使用以下代码在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);
}
?>

这一切都运作良好但我在这里找不到两件事。

  1. 我希望我的行在备用行
  2. 上生成<tr class="odd"><tr class="even">
  3. 我希望<td></td>中的第一个<tr>计算显示数据的行号,例如第二个中的第一个<td>1</td>中的<tr class=""> <td>2</td>等。
  4. 我已经看过很多这样的例子

    $count = 1;
    while ($count <= 10)
    {
    echo "$count ";
    ++$count;
    }
    

    但是无法弄清楚如何将它实现到我的示例中,或者我应该使用其他方法。我知道我可以在jQuery中使用css3在某些浏览器中执行表行,但在这种情况下更喜欢使用php解决方案。

3 个答案:

答案 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>