【问题标题】:Count within nested loop and use value before second nested loop在嵌套循环中计数并在第二个嵌套循环之前使用值
【发布时间】:2019-06-02 11:27:42
【问题描述】:

所以我有一个嵌套循环,因为我从两个不同的来源获取数据。 我想计算它通过第二个循环的次数,并在第一个循环中使用该值。

我在 RaidFacade 中有 2 个条目 以及“GetRaidProgression”中的 10 个条目

$raid_facade = new RaidFacade();
$raids = $raid_facade->getAll();
unset($raid_facade);
<div class='col-lg-4' id='toggleraid'>
  <div class='topbar'>Raid Progress</div>
  <?php
    $boss_count_alive = 0;
    $boss_count_killed = 0;
    foreach ($raids as $raid)
    {
      $raid_name = $raid->getName();
      echo "<div class='raid'>";
      echo "<div class='name'>";
      echo "<a class='collapsed' data-toggle='collapse' data-target='#raid".$raid_name."' aria-expanded='false' aria-controls='raid".$raid_name."'>";
      echo $raid_name;
      echo "</a>";
      echo "</div>";
      echo "<div class='prog'>".$boss_count_killed."<mark>/</mark>".$boss_count_alive."</div>";
      echo "<div class='bar'>";
      echo "<div class='color' style='width: 60%'></div>";
      echo "</div>";
      echo "<div class='gradient'></div>";
      echo "<img src='img/layout/raid/zul_gurub.jpg'>";
      echo "</div>";
      echo "<div id='raid".$raid_name."' class='collapse raidCollapse' data-parent='#toggleraid'>";
      foreach ($raid->getRaidProgression() as $boss)
      {
        $boss_count_alive++;
    $class = "fas fa-times fa-sm";
    $youtube = "";
        if ($boss->getStatus() == 1)
        {
          $class = "fas fa-check fa-sm";
      $boss_count_killed++;
        }
        echo "<div>";
        echo "<div><span><i class='".$class."'></i>".$boss->getBoss()."</span></div>";
    echo "</div>";
      }
      echo "</div>";
    }
  ?>
</div>

div class='prog' 中,我想使用$boss_count_alive$boss_count_killed 值。

这没有发生,第一个条目返回 0/0,下一个返回 3/10(这是我对第一个条目的预期结果)

获得视觉效果:

提前致谢!

【问题讨论】:

    标签: php loops count nested


    【解决方案1】:

    您的第二个循环只会在您回显 "&lt;div class='prog'&gt;".$boss_count_killed."&lt;mark&gt;/&lt;/mark&gt;".$boss_count_alive."&lt;/div&gt;"; 后运行,这就是它第一次回显 0/0 的原因。

    如果您希望它第一次回显 3/10,您需要先运行内部循环来计算值,然后回显。在你的情况下,它会是这样的:

    foreach ($raids as $raid)
    {
      $raid_name = $raid->getName();
      $bosses_html = "";
      foreach ($raid->getRaidProgression() as $boss)
      {
        $boss_count_alive++;
        $class = "fas fa-times fa-sm";
        $youtube = "";
        if ($boss->getStatus() == 1)
        {
          $class = "fas fa-check fa-sm";
          $boss_count_killed++;
        }
        $bosses_html .= "<div>";
        $bosses_html .= "<div><span><i class='".$class."'></i>".$boss->getBoss()."</span></div>";
        $bosses_html .= "</div>";
      }
      echo "<div class='raid'>";
      echo "<div class='name'>";
      echo "<a class='collapsed' data-toggle='collapse' data-target='#raid".$raid_name."' aria-expanded='false' aria-controls='raid".$raid_name."'>";
      echo $raid_name;
      echo "</a>";
      echo "</div>";
      echo "<div class='prog'>".$boss_count_killed."<mark>/</mark>".$boss_count_alive."</div>";
      echo "<div class='bar'>";
      echo "<div class='color' style='width: 60%'></div>";
      echo "</div>";
      echo "<div class='gradient'></div>";
      echo "<img src='img/layout/raid/zul_gurub.jpg'>";
      echo "</div>";
      echo "<div id='raid".$raid_name."' class='collapse raidCollapse' data-parent='#toggleraid'>";
      echo "</div>";
      echo $bosses_html;
    }
    

    在这个例子中,第一组回声被移到内循环下方。通常会在内部循环中回显的 html 存储在一个变量中,以便稍后在最后回显。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-24
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2013-08-04
      • 2020-10-30
      相关资源
      最近更新 更多