PHP while 循环回显每 3 行

PHP while loop echo every 3 rows

提问人:Nashie 提问时间:2/12/2023 最后编辑:SyscallNashie 更新时间:2/12/2023 访问量:69

问:

我试图在数据库中的 3 行后显示一些内容,但很难让它工作。

这是我目前的代码

<?php 
$query = "SELECT * FROM articles ORDER BY id DESC LIMIT 6";
$stmt = $con->prepare($query);
$stmt->execute();
$num = $stmt->rowCount();
if ($num>0) {
   while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      extract($row);

      echo "DATA FROM DATABASE";

      if (($num % 3) == 0) {
         echo '<h1>code every 3 rows</h1>';
      }
      $num++;
   }
}
// if no records found
else{
   echo "no data found";
}
?>

目前,这是在每行 1 和 4 之后输出的。

我尝试了以下方法。

if ($num % 3) {
   echo '<h1>code every 3 rows</h1>';
}
$num++;

这将在第 2 行、3 行、5 行之后输出

我敢肯定,这是一件简单的事情,我看得太过分了,但任何帮助我指明正确方向的帮助都会很棒。

php while-循环

评论

0赞 Nigel Ren 2/12/2023
我建议直接删除数组中的值并使用值。extract($row);

答:

2赞 Syscall 2/12/2023 #1

您可以使用:($num - 1) % 3 == 2

if (($num - 1) % 3 == 2) {
   echo '<h1>code every 3 rows</h1>';
}
$num++;
echo "DATA FROM DATABASE";

例:

foreach (range(0, 6) as $k => $i) {
    if (($k - 1) % 3 == 2) {
        echo "---\n";
    }
    echo "$i\n";
}

输出:

0
1
2
---
3
4
5
---
6

或者,如果您之前执行以下操作:$k % 3 == 2echo

foreach (range(0, 6) as $k => $item) {
    echo "$item\n";
    if ($k % 3 == 2) {
        echo "---\n";
    }
}
3赞 Wisdom Ighofose 2/12/2023 #2

您的错误可以在您初始化的地方找到。将其设置为行计数,然后开始增加循环中的$num。您的代码应该像这样重构:$num

<?php 
$query = "SELECT * FROM articles ORDER BY id DESC LIMIT 6";
$stmt = $con->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();

//$num should start from 1 and increase in the loop
$num = 1;
if($count>0){
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row);

echo "DATA FROM DATABASE";


if( ($num % 3) == 0){
echo '<h1>code every 3 rows</h1>';
}
$num++;
}
}
// if no records found
else{
echo "no data found";
}
?>

评论

0赞 Nashie 2/12/2023
谢谢,这很有道理;我有过度思考的习惯。再次感谢。