Подсчитать во вложенном цикле и использовать значение до второго вложенного цикла - PullRequest
1 голос
/ 02 июня 2019

Итак, у меня есть вложенный цикл из-за получения данных из двух разных источников. Я хочу посчитать, сколько раз он проходит через второй цикл, и использовать это значение в первом цикле.

У меня есть 2 записи в RaidFacade И 10 записей в «GetRaidProgression»

$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 (что является моим ожидаемым результатом для первой записи)

Чтобы получить визуальный вид:

enter image description here

Заранее спасибо!

1 Ответ

1 голос
/ 02 июня 2019

Ваш второй цикл будет запущен только после того, как вы повторили "<div class='prog'>".$boss_count_killed."<mark>/</mark>".$boss_count_alive."</div>";, поэтому он повторяет 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-код, который обычно отображается во внутреннем цикле, сохраняется в переменной, которая будет отображаться позже в конце.

...