PHP while循环找到最后一行

时间:2009-08-07 23:31:10

标签: php

$sql = mysql_query("SELECT * FROM comments WHERE user = 1");

$i = 1;
while ($row = mysql_fetch_assoc($sql)) {

<p>$i. <?php echo $row['comment'] ?></p>

<div class="border"></div>

$i++;
}

如何在最后一条评论下输出<div class="border"></div>

6 个答案:

答案 0 :(得分:23)

$sql = mysql_query("SELECT * FROM comments WHERE user = 1");
$number = mysql_num_rows($sql);
$i = 1;
while ($row = mysql_fetch_assoc($sql)) {

   echo '<p>' . $i . $row['comment'] . '</p>';

   if ($i < $number)
   {
       echo '<div class="border"></div>';
   }

   $i ++;
}

使用WebDevHobo的建议。

答案 1 :(得分:8)

$sql = mysql_query("SELECT * FROM comments WHERE user = 1");
$output = array ();
while ($row = mysql_fetch_assoc($sql)) {
  $output[] = $row['comment'];
}
echo join('<div class="border"></div>', $output);

答案 2 :(得分:4)

$number = mysql_num_rows($sql);

这将告诉您将返回多少行。基于此,您可以确保最后一个没有DIV。

答案 3 :(得分:1)

$sql = mysql_query("SELECT * FROM comments WHERE user = 1");

$i = 1;
while ($row = mysql_fetch_assoc($sql)) {

$out_data[] = "<p>$i {$row['comment']} </p>";

$i++;
}

$divider = '<div class="border"></div>';
$output = implode ($divider, $out_data);

echo $output;

答案 4 :(得分:0)

$rslt = mysql_query("SELECT * FROM comments WHERE user = 1");

$i = 1;
if ($row = mysql_fetch_assoc($rslt)) {
  echo '<p>'. $i . ' '. $row['comment'] . '</p>';
  $i++;
  while ($row = mysql_fetch_assoc($rslt)){
    echo '<div class="border"></div>';
    echo '<p>'. $i . ' ' . $row['comment'] . '</p>';
    $i++;
  } // end while
} // end if

避免需要知道行数。 仅执行一次if语句而不是每个循环。 HTML和PHP有点混乱和不一致,所以我只是假设整个块都在php标签内。显然,打开并关闭你认为合适的php标签。

这在很大程度上是一个样式问题,但我认为变量名$ sql有点误导,因为它经常用于保存要执行的sql语句的字符串,因此我将变量名更改为$的rslt。

答案 5 :(得分:0)

对这类问题的一般回答,并使用Javascript,因为它很容易扔进控制台并玩:

var count = 0;
var foo = 3;
while( count < 3 ) {
    console.log("Header - " + count);
    console.log("Body - "+ count);
    console.log("Footer - " + count);
    count++;
}

这将打印:

标题 - 0
身体 - 0
页脚 - 0
标题 - 1
身体 - 1
页脚 - 1
标题 - 2
身体 - 2
页脚 - 2

请求的案例基本上是&#34;在除最后一个元素之外的所有元素上打印页脚。&#34;

如果您认为第二次循环迭代只是第一次循环的延续,您可以看到如何执行此操作而无需查找记录总数 - 例如无需对count进行第二次查询。更简洁:当你试图弄清楚如何使用循环(或递归)做某事时,你应该尝试实际写出你的循环所做的事情,但没有实际循环 - 例如复制并粘贴循环块至少三次。

不是在这里这样做,我只是要完成答案,并将推导留给读者:〜)

var count = 0;
var foo = 3;
while( count < 3 ) {
    if( count > 0 ) {
        console.log("Footer - " + (count - 1));
    }
    console.log("Header - " + count);
    console.log("Body - "+ count);
    count++;
}