【问题标题】:Alternating between even and odd in a while loop in PHP在PHP的while循环中在偶数和奇数之间交替
【发布时间】:2011-05-24 15:07:47
【问题描述】:

我一直在编写几行代码,但似乎无法让它工作。基本上我想通过一个while循环在偶数和奇数表样式之间交替。我做错了什么?

似乎它每次只循环通过 if()。

谢谢!

<?php
    include 'connect.php';
    echo "<table id='hor-zebra'>";
    $i = 0;
    while($row = mysql_fetch_array($result))
    {
       if(i%2 == 0)
       {
          echo "<tr class='even'>";
          echo "<td>" . $row['departure'] ." ✈ ". $row['destination'] . "</td>";
          echo "</tr>";
       }
       
       else
       {
          echo "<tr>";
          echo "<td>" . $row['departure'] ." ✈ ". $row['destination'] . "</td>";
          echo "</tr>";
       }
       $i++;
    }
    echo "</table>";

    mysql_close($con);

  ?>

【问题讨论】:

  • 1) 不要在不需要时复制代码块。 echo "&lt;tr class='".($i%2 ? 'odd' : 'even')."'&gt;" 可以正常工作。 2) 如果您启用了屏幕错误,您会立即注意到缺少$ 的问题。

标签: php while-loop


【解决方案1】:

您的if 条件中有错字。应该是:

   if($i%2 == 0)

您还可以通过将类名分配给 if 和 else 块中的变量来节省一些击键:

   if($i%2 == 0)
   {
      $class = 'even';
   }
   else
   {
      $class = 'odd';
   }

   echo "<tr class='$class'>";
   echo "<td>" . $row['departure'] ." ✈ ". $row['destination'] . "</td>";
   echo "</tr>";

【讨论】:

  • 谢谢!会采用你的方式!
  • 你甚至可以进一步改进这个:$class = ( $i % 2 == 0 ) ? 'even' : 'odd';
【解决方案2】:

您也可以使用 css .nth-child 属性

   tr:nth-child(even) {background: #CCC}
tr:nth-child(odd) {background: #FFF}

As per W3 example

【讨论】:

  • 它应该如果不是那么它的缺乏浏览器不支持 w3 规范
【解决方案3】:

CSS-Tricks 为这个问题发布了一个非常非常优雅的解决方案。 它看起来像是超级简化的 C++ 魔法。基本上他们这样做:

<div class="example-class<?php echo ($xyz++%2); ?>">

这适用于任何循环:for、foreach 和 while。 修改整数会给你更大的步长,即在 3 之后重置,在 4 之后重置等等。

CSS-Tricks final solution

【讨论】:

    【解决方案4】:

    你忘记了'$'

     if(i%2 == 0)
    

    应该是

     if(($i % 2) == 0)
    

    【讨论】:

    • 哈哈哈哈!!该死的,我刚才在写代码的时候看到了……现在最好去睡觉!谢谢大家!
    【解决方案5】:

    替换此行...

    if(i%2 == 0)
    

    ...带有以下内容:

    if($i % 2 == 0)
    

    【讨论】:

    • 谢谢!!这就是我迟到时会发生的事情......下次最好去睡觉:)
    【解决方案6】:

    这可以进一步改进。

    foreach($post_array as $array => $row) {
        $class = ($array %2 == 0) ? 'even' : 'odd';
        echo '
        <tr class="'.$class.'">
            <td>' .$row['title']. '</td>
            <td>' .$row['content']. '</td>
            <td>' .$row['catid']. '</td>
            <td>' .$row['id']. '</td>
            <td>' . '<form action="edit.php?id='.$row['id'].'" method="post">
                <input type="hidden" name="id" id="id" value="'.$row['id'].'" />
                <input type="submit" name="edit" value="Edit" />
            </form>' . '</td>
            <td>' . '<form action="" method="post">
                <input type="hidden" name="id" id="id" value="'.$row['id'].'" />
                <input type="submit" name="delete" value="Delete" />
            </form>' . '</td>
        </tr>';
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 2017-12-11
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2022-11-26
      相关资源
      最近更新 更多