【问题标题】:Stop looping foreach inside while在while内停止循环foreach
【发布时间】:2020-08-13 06:14:47
【问题描述】:

我尝试使用数组从数据库中获取数据。但是当我在while中组合foreach时,它会在数据库中循环尽可能多的数据。如何停止循环?我已经做了休息功能但不起作用。我的代码中缺少什么。

这是我的代码:

<?php
  $no=1;                                
  if(mysqli_num_rows($query) > 0)
    {
      $useArray = array("A","B","B","C");
      while($row = mysqli_fetch_array($query))
      {
        foreach ($useArray as $array)
        {
          echo"<tr>";
          echo "<td>".$no."</td>";
          echo "<td>".$row['id']."</td>";
          echo "<td>".$row['name']."</td>";
          echo "<td>".$row['grade']."</td>";
          if($row['v1']>=2.000)
            echo "<td class='bg-success'>".$row['v1']."</td>";
          elseif($row['v1']>=1.500)
            echo "<td class='bg-warning'>".$row['v1']."</td>";
          elseif($row['v1']>=0.100)
            echo "<td class='bg-danger'>".$row['v1']."</td>";
          else
          {
            echo "<td class='bg-dark'>".$row['v1']."<h5>D</h5></td>";
          }
          echo "<td>".$array."</td>";
          if ($array == "C") {
            break;
           }
          echo "</tr>";
        }
      $no++;
    }
  }
 else
  {
?>
</tbody>
</table>
<?php
echo "No Point";
}
?>

结果如下

我先搜索,但没有工作。也许我错误地实现了代码。这是我的参考: Combining foreach and while in PHP , break out of if and foreach.

我的预期结果是:

总数据由数组中的字符串数量固定,因此如果数组中为 ("A","B","B","C"),那么在数据库中也只有 4 行。 任何帮助都将不胜感激。

【问题讨论】:

  • 你对输出有什么期望? foreach() 循环与 SQL 查询有何关系?
  • 我只是编辑我的问题。 @NigelRen
  • @NigelRen SQL 查询获取数据以显示数据,foreach 为显示的每个数据放置字符串数组。
  • 您能从数据库中添加一段 SQL 摘录吗?您当前正在遍历固定数组,并且仅在循环位于最后一个元素“C”时才中断循环。我无法真正理解你想要做什么。在您预期结果的图像中,您从哪里知道该行应该包含哪个字母?

标签: php


【解决方案1】:

break 只留下近块。在你的代码中:

while($continue && $row = mysqli_fetch_array($query))
{
    foreach ($useArray as $array)
    {
        echo "<tr>";
        echo "<td>".$no."</td>";
        ...
        if ($array == "C") {
            break;
        }
        echo "</tr>";
    }
  $no++;
}

break 离开 foreach,但 while 继续。

你可以添加一个变量来离开 while 像:

$continue = true;
while($continue && $row = mysqli_fetch_array($query))
{
    foreach ($useArray as $array)
    {
        echo "<tr>";
        echo "<td>".$no."</td>";
        ...
        if ($array == "C") {
            $continue = fase;
            break;
        }
        echo "</tr>";
    }
  $no++;
}

【讨论】:

    【解决方案2】:

    这里发生的是您的break 破坏了foreach,而不是循环通过您的数据库查询的while。你可以尝试使用break 2来突破。

    这里的2 表示您试图跳出多少个“可破坏”循环。

    不过,我相信您可以通过修改数据库查询来改进您的代码,以避免不必要的循环。

    【讨论】:

    • break 2 是什么意思?
    • @DoxTheaugbey 2 in break 2 表示破坏 2 层可破坏块。 foreach 是第一层,而用于循环所有数据库行的 while 是另一层。
    • 表示我在外面也用过break?
    • 好的,想知道你想要做什么,你能告诉我们你的数据库查询以及你想要实现的目标吗?我感觉你走错了路。
    • 这就是我所拥有的:jsfiddle.net/uLfyoh72
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2018-10-14
    • 2017-05-28
    • 1970-01-01
    • 2020-06-20
    • 2010-09-26
    • 2013-09-11
    相关资源
    最近更新 更多