как заставить что-то отображать только один раз в цикле

0

У меня запущен запрос mysql, и он проверяет, соответствует ли итератор 1, затем отображает этот заголовок div...

if ($this->dliterator == 1) {echo "<div class='clientsection' id='downloads'>Downloads</div><br/>";};

Проблема заключается в том, что итератор dl может не начинаться с 1. (он напрямую связан с загрузкой из базы данных).

Как я могу заставить это отображать только в первый раз через цикл ТОЛЬКО?

while ($row = mysql_fetch_assoc($result)) { 

   if ($row['download'] != null){
    if ($this->dliterator == 1) {echo "<div class='clientsection' id='downloads'>Downloads</div><br/>";};


    if ($editDownload == 1) {
     echo "<div class='clientlink' style='margin-top: 15px;'>";
     echo "<input name='downloads[$this->dliterator][name]' type='text' id='download$this->dliterator' value='" . $row['download'] . "'/>";
     echo "<input name='downloads[$this->dliterator][title]' type='text' id='downloadtitle$this->dliterator' value='" . $row['downloadtitle'] . "'/>";
     echo "<img class='removelink' src='/images/deletelink.png' width='15' />";
     echo "<input id='downloadid' name='downloads[$this->dliterator][id]' type='hidden' value='".$row['downloadid']."' style='display: none'/>";
     echo "<br/><img id='uploaddownload$uploaditerator' class='uploaddownload' src='../images/upload.png' width='80'/>"; 
     echo "</div>";


    };

   };

   $this->dliterator++;

   $uploaditerator++;
};

Спасибо за ответы! Вот мое рабочее решение благодаря Зуулю:

if ($row['download'] != null){
if (($this->dliterator != null ) && ($check ==0)) {echo "<div class='clientsection' id='downloads'>Downloads</div><br/>";
$check++;};
Теги:

4 ответа

9
Лучший ответ

Попробуйте следующее:

$check=0;

if (($this->dliterator == 1) && ($check==0)) {
  echo "<div class='clientsection' id='downloads'>Downloads</div><br/>";
  $check++;
};

Он войдет в оператор if, если ваш dliterator==1 и if $check не изменился... После внутри, он изменит $check, тем самым предотвращая выполнение оператора if!

Надеюсь, что это поможет!

  • 0
    Я думаю, что если сделать $check логическим, это сделает пример более читабельным, но в противном случае +1.
2

Поместите флаг из цикла на false $firstLineFetched = false;, а затем, если он является ложным, вы установите его значение true и выполните первую обработку строки

0
$row = mysql_fetch_assoc($result);

if ($row && $row['download'] != null) {

    echo "<div class='clientsection' id='downloads'>Downloads</div><br/>";
}

while ($row) {

    // ...

    $row = mysql_fetch_assoc($result);
}
  • 0
    Это выглядит странно - во-первых, $ row также должен быть проверен до того, как во-вторых, вы бы пропустили отображение данных последней выборки в $ row.
  • 0
    В этом вопросе нет ясности. Мое понимание было просто «сделать дополнительный шаг в начале цикла только на первой итерации». Это может быть достигнуто путем развертывания цикла, как я сделал. Если это не было целью, я не понял вопроса.
0

Вы можете просто установить счетчик вне цикла в 0 и сделать что-то вроде:

if($i == 0)
  printf("<div class=........>\n");

Затем обязательно добавьте $i ($ я ++) в конце while() и в следующий раз через цикл он пройдет прямо над оператором printf().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню