2

可能重复:
php:如何在数组中添加奇数/偶数循环

我正在使用以下代码在 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. 我希望我的行在<tr class="odd">备用<tr class="even">行上生成
  2. 我希望计数中的第一个<td></td>显示<tr>数据的行号,例如第二个<td>1</td>中的第一个<tr class=""> <td>2</td>等。

我看过很多这样的例子

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

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

4

3 回答 3

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 整除,则为偶数行,否则为奇数行。我们将类字符串保存在 中$class,并将其放入<tr>标签中。

于 2012-07-28T00:44:20.983 回答
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>
于 2012-07-28T00:45:43.887 回答
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>
于 2012-07-28T00:47:37.877 回答