PHP while循环查找最后一行

13
$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个回答

33
$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的建议。


7
不需要 $i,直接使用 if( --$number===0 ) 即可。 - Martijn
使用PDO:$number = $req->rowCount(); while (...) { if (--$number != 0) { ... } } - cyclone200

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

4
$number = mysql_num_rows($sql);

这将告诉您将返回多少行。基于此,您可以确保最后一个不包含DIV标签。

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;

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。

0
一个针对这种类型问题的通用答案,使用Javascript是因为它很容易在控制台中使用和调试:
var count = 0;
var foo = 3;
while( count < 3 ) {
    console.log("Header - " + count);
    console.log("Body - "+ count);
    console.log("Footer - " + count);
    count++;
}

这将打印:

Header - 0
Body - 0
Footer - 0
Header - 1
Body - 1
Footer - 1
Header - 2
Body - 2
Footer - 2

所请求的情况基本上是说“在除最后一个元素外的所有元素上打印页脚。”

如果您将第二个循环迭代视为第一个迭代的延续,您可以看到如何在不需要查找记录总数的情况下完成此操作-例如,无需进行第二次计数查询。更简洁地说:当您试图使用循环(或递归)来解决某些问题时,应尝试实际编写循环执行的内容,但不要实际循环-例如,至少复制和粘贴循环块三次。

与其在这里做那件事,我只想结束答案,并将推导留给读者:~)

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++;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接