【问题标题】:Creating new table row - PHP while loop创建新表行 - PHP while 循环
【发布时间】:2017-07-25 15:51:24
【问题描述】:

每当我的 while 循环达到每个 4 个结果(4、8、12、16 等)时,我都会尝试这样做,它会创建一个新的表行。

应该是这样的:

[table row]
[data] [data] [data] [data]
[/table row]

[table row]
[data] [data] [data] [data]
[/table row]

等等……

目前我有这个:

  <?php 
$cat=mysql_query("SELECT * FROM kb_categories"); 
        $i = 0;
        while($catData=mysql_fetch_assoc($cat)):
        $i ++; 
        //Select the numbers of articles inside each category.
        $number=mysql_num_rows(mysql_query("SELECT * FROM kb_articles WHERE cat_id='".$catData['id']."'"));

        ?>

    <td><img src="/themes/dream/images/icons/folder.gif"><span><?php echo $catData['name']; ?></span> (<?php echo $number; ?>)</td>
    <?php endwhile; ?> 

现在,它只是生成这个:

[table row]
[data] [data] [data] [data] [data] [data] etc.
[/table row]

我只是不确定如何在此示例中使用 $i。有人可以帮我吗?

【问题讨论】:

标签: php loops tabular


【解决方案1】:

我能想到的两个解决方案。 要么检查 i 何时等于 for,然后插入行并将 i 重置回 0。 或者,看看它是否能被 4 整除,然后插入该行。 (这可能更好,因为这样 i 将等于数据量。)

<?php 
$cat=mysql_query("SELECT * FROM kb_categories"); 
$i = 0;
while($catData=mysql_fetch_assoc($cat)) :
    $i ++; 
    //Select the numbers of articles inside each category.
    $number=mysql_num_rows(mysql_query("SELECT * FROM kb_articles WHERE cat_id='".$catData['id']."'"));

    if($i==3) {
        // Insert row here, probably something like this:
        echo "</tr><tr>";
        $i = 0;
    }

?>

<td><img src="/themes/dream/images/icons/folder.gif"><span><?php echo $catData['name']; ?></span> (<?php echo $number; ?>)</td>
<?php endwhile; ?> 

或者第二种方法:

<?php 
$cat=mysql_query("SELECT * FROM kb_categories"); 
$i = 0;
while($catData=mysql_fetch_assoc($cat)) :
    $i ++; 
    //Select the numbers of articles inside each category.
    $number=mysql_num_rows(mysql_query("SELECT * FROM kb_articles WHERE cat_id='".$catData['id']."'"));

    if( (($i+1) % 4) == 0) {
        // Insert row here, probably something like this:
        echo "</tr><tr>";
    }

?>
<td><img src="/themes/dream/images/icons/folder.gif"><span><?php echo $catData['name']; ?></span> (<?php echo $number; ?>)</td>
<?php endwhile; ?> 

【讨论】:

  • 非常感谢!我使用第一种方法,我只是将 if($i==3) 更改为 if($i==5) (因为我需要每个表行 4 条记录。谢谢!
【解决方案2】:
  • 首先,将数据放入数组

  • 接下来,使用array_chunk()将其拆分成几个嵌套数组

  • 最后,在模板中使用2个嵌套的foreach循环输出

  • 看在上帝的份上,学会缩进你的代码

  • 另外,您不应该使用 mysql_num_rows() 来计算行数。
    请改用SELECT count(*)

  • 根本不应该有嵌套查询 - 您应该使用 JOIN 进行一个查询。如果您不知道它是什么 - 请在此处提出另一个问题。

【讨论】:

  • 为什么你不应该使用 mysql_num_rows() 来计算行数,它本身有什么不好的地方,还是只是一种优化?
  • 非常好的答案,但我认为 user169691 并不完全具备实现这一目标的技能,没有一些更深入的例子,否则他不会在这里问这种问题。你必须在他们自己的层面上回答人们的问题,让他们从经验中学习,你不能仅仅因为这不是语义上最好的方式就直接把他们扔到最深处。
  • @user,所以,你总是在做傻事。如果您只需要数字 - 向您的数据库询问数字,而不是所有行。
  • @Col。弹片我倾向于不同意你的观点,stackoverflow 上有很多高质量的问题和答案。 Stackoverflow 适用于业余爱好者和专家。如果有人不太了解,请轻轻地引导他,或者继续前进——如果你不回答问题,没有人会对你大喊大叫。
  • 所以@Col。 Shrapnel 正在拯救世界,一次一个 PHP 问题。如果您不喜欢这个网站,请查找其他网站。
猜你喜欢
  • 2013-07-12
  • 2021-10-07
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2018-05-21
  • 2011-06-23
相关资源
最近更新 更多