【问题标题】:mysql into table alternating <td>mysql 进表交替<td>
【发布时间】:2013-12-20 23:56:12
【问题描述】:

我有一个正在使用 mysql 填充的表

<?php $sql = mysqli_query($con, "SELECT * FROM itemList"); ?>

<table>
<?php while($row=mysqli_fetch_assoc($sql)){ ?>
<tr>
<td>
<?php echo $row['item'] . ": <input type=\"checkbox\" name=\"cart[]\"
      value=\"" . $row['item'] . "\">";?>
</td>
<td>
<?php echo $row['item'] . ": <input type=\"checkbox\" name=\"cart[]\" 
value=\"" . $row['item'] . "\">";?>
</td>
</tr>
<?php 
} ?>
</table>

目前,此代码将相同的数据循环到表中的两列中。我将如何使数据循环进入备用列?

例如:

<table>
  <tr>
     <td>
        item1
     </td>

     <td>
       item2
   </td>
</tr>
<tr>
    <td>
      item3
    </td>

    <td>
       item4
    </td>
</tr>
</table>

【问题讨论】:

    标签: php mysql while-loop html-table


    【解决方案1】:

    我会使用索引计数器和模运算符来检查该计数器是偶数还是不偶数。比如:

    $i = 1;
    while (bla) {
        $i++;
        if ($i % 2 == 0) {
           // even number, col 1
        } else {
           // uneven number, col 2
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      <?php $sql = mysqli_query($con, "SELECT * FROM itemList"); ?>
      
      <table>
      <tr>
      <?php  $i=1; while($row=mysqli_fetch_assoc($sql)){ ?>
      
      <td>
          <?php echo $row['item'] . ": <input type=\"checkbox\" name=\"cart[]\"
            value=\"" . $row['item'] . "\">";?>
      </td>
      
      <?php if($i%2 == 0){ echo "</tr><tr>";  } ?>
      
      <?php $i++;
      } ?>
      </tr>
      </table>
      

      按照我上面的anwser上的@OlivierH cmets 的其他方式

      <?php 
      $rows = array(); while($row=mysqli_fetch_assoc($sql)){
       $rows[] = $row;
      } 
      ?>
      
      <table>
      <?php $totalrows = count($rows); 
      if($totalrows){ ?>
          <tr>
          <?php  $i=1; foreach($totalrows as $r){ ?>
              <td>
                  <?php echo $r['item'] . ": <input type=\"checkbox\" name=\"cart[]\"
                    value=\"" . $r['item'] . "\">";?>
              </td>
              <?php if($i%2 == 0 && $totalrows != $i){ echo "</tr><tr>";  } ?>
          <?php $i++; } ?>
          </tr>
      <?php } ?>
      </table>
      

      【讨论】:

      • 这将在您有结果时起作用,这取决于您如何处理此问题。我只是提供一种实现结果的方法。
      • 不敢相信这样的回答能被接受。此代码不可读、不可维护,并且由于输出空行而无法正常工作。正如预期的那样,OP 复制并粘贴了这段代码,并完美地显示了他的结果。只是希望以后的访问者有足够的勇气去阅读cmets,而不是以此为例。
      【解决方案3】:

      您可以使用计数并玩它:

      • 对于第一项,您显示 &lt;tr&gt; 和您的数据
      • 对于第二个项目,您显示您的数据和&lt;/tr&gt;
      • 对于第三项,您显示 &lt;tr&gt; 和您的数据
      • ...

      您可以使用%(模运算符)。它返回一个部门的其余部分。

      例子:

      echo 0%2; //0
      echo 1%2; //1
      echo 2%2; //0
      echo 3%2; //1
      echo 4%2; //0
      ...
      

      您也可以只使用设置为 0、1、0 ... 的变量。 这是代码:

      $sql = mysqli_query($con, "SELECT * FROM itemList"); 
      $i = 0;
      
      echo "<table>";
      while($row=mysqli_fetch_assoc($sql)){ 
          //create new line if this item is the first of the row (i == 0)
          if($i == 0){
              echo "<tr>";
          }
      
          echo "<td>" . $row['item'] . ": <input type=\"checkbox\" name=\"cart[]\" value=\"" . $row['item'] . "\"></td>";
      
          //if the item is the second of the row, close the tr and set i to 0
          if($i == 1){
              echo "</tr>";
              $i = 0;
          }
          //else, increment i 
          else{
              $i++;
          }
      }
      echo "</table>";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2020-01-02
        • 1970-01-01
        相关资源
        最近更新 更多