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);
}
?>

これはすべてうまく機能していますが、ここで2つのことを解決できません。

  1. 行を交互に生成<tr class="odd">したい<tr class="even">
  2. カウント<td></td>内の最初にデータの行番号を表示する必要があります。たとえば、最初の2番目などです。<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には であり、これを最初の列に入れました。次に、 が 2 で割り切れるかどうかに基づいて、現在の行が偶数行か奇数行かを判断します。 が 2 で割り切れる$i場合$iは偶数行、そうでない場合は奇数行です。クラス文字列を に保存し、タグ$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 に答える