【问题标题】:Breaking out of a foreach within a nested if statement在嵌套的 if 语句中打破 foreach
【发布时间】:2018-10-07 13:16:49
【问题描述】:

我很难弄清楚如何从嵌套在 foreach 循环中的 else 语句中拆分出一个部分。

我想打破 foreach 循环的部分是:

echo '
  <div class="moreEventsContainer">
  <div id="moreEventsWrap" class="total-center">
  <span class="moreEventsLink">SEE ALL EVENTS</span>
  <div class="rightArrow"></div>
  </div>
  </div>'
;

问题是它是 else 语句的一部分,但是将它留在循环中只会让它在我只想让它出现一次时一遍又一遍地重复自己。

有人知道我是怎么做到的吗?

我尝试在 else 语句结束之前嵌套替代 endforeach,但它只是破坏了代码。

有什么想法吗?

foreach ($event_rows as $event_row) {
        $event_name = $event_row['event_name'];
        $display_date = $event_row['display_date'];
        $event_description = $event_row['small_desc'];
        $end_date = new DateTime($event_row['end_date']);
        $date = new DateTime('now');
        if ($date >= $end_date) {
            //$noEvents = 'No events are scheduled yet.';
            $noEvents = '
            <div id="noEvents">
            </div>
            ';
        } else {
            echo '<div class="eventBlock">';
            echo '<div class="total-center eventBlockWrap">';
            echo '<span class="displayDate">'. $display_date .'</span>';
            echo '<span class="eventName">'. $event_name .'</span>';
            echo '<p class="dGsmall margNone">'. $event_description .'</p>';
            echo '</div>';
            echo '</div>';
            echo '<div class="moreEventsContainer">
                    <div id="moreEventsWrap" class="total-center">
                        <span class="moreEventsLink">SEE ALL EVENTS</span>
                        <div class="rightArrow"></div>
                    </div>
                </div>'
            ;
        }
    }
    if ($noEvents != NULL) {
        echo $noEvents;
    } else {

    }

更新:

foreach ($event_rows as $event_row) {
        $event_name = $event_row['event_name'];
        $display_date = $event_row['display_date'];
        $event_description = $event_row['small_desc'];
        $end_date = new DateTime($event_row['end_date']);
        $date = new DateTime('now');
        if ($date >= $end_date) {
            //$noEvents = 'No events are scheduled yet.';
            $noEvents = '
            <div id="noEvents">
            </div>
            ';
        } else {
            echo '<div class="eventBlock">';
            echo '<div class="total-center eventBlockWrap">';
            echo '<span class="displayDate">'. $display_date .'</span>';
            echo '<span class="eventName">'. $event_name .'</span>';
            echo '<p class="dGsmall margNone">'. $event_description .'</p>';
            echo '</div>';
            echo '</div>';
            break;
            echo '<div class="moreEventsContainer">
                    <div id="moreEventsWrap" class="total-center">
                        <span class="moreEventsLink">SEE ALL EVENTS</span>
                        <div class="rightArrow"></div>
                    </div>
                </div>'
            ;
        }
 }

【问题讨论】:

  • 我想跳出 foreach 循环 - 试试break
  • I just want it to appear once. -> 所以无论出现什么情况,您都希望其他数据至少打印 1 次?(即使每次 if 条件都为真)跨度>
  • 我用新代码更新了我的问题。我尝试了 break 方法,它只从我的数据库中输出一行。我有几条要输出的记录,但是休息后的部分我只想出现一次。
  • @Paul 阅读我的评论一次,请回答
  • @AlivetoDie 我希望 else 中的 echo '&lt;div class="moreEventsContainer"&gt; 只出现一次。所以,如果我的数据库中有 100 条记录,我希望所有 100 条记录都循环并输出,然后 moreEventsContainer 在那之后显示一次......只有在条件为 else 的情况下。

标签: php if-statement pdo foreach


【解决方案1】:

根据您的更新, 我想你想要这个代码

echo '<div class="moreEventsContainer">
        <div id="moreEventsWrap" class="total-center">
          <span class="moreEventsLink">SEE ALL EVENTS</span>
              <div class="rightArrow"></div>
        </div>
      </div>';

在显示所有记录后执行一次。

所以,我建议使用它而不是 break 语句

if($i==sizeof($event_rows)){
    echo '<div class="moreEventsContainer">
    <div id="moreEventsWrap" class="total-center">
      <span class="moreEventsLink">SEE ALL EVENTS</span>
          <div class="rightArrow"></div>
    </div>
  </div>';
}

其中$i 被初始化为1,并在每次循环执行时递增。

【讨论】:

  • 你能再深入一点吗?为什么让 $i 逐渐增加可以解决这个问题?
  • 因此,sizeof() 函数为我们提供了数组的长度。这意味着如果变量中有 100 条记录,sizeof() 将返回 100。使用计数器变量 $i 将帮助我们跟踪它是否是最后一条记录。因此,通过增加 $i 直到它的数组大小,我们知道我们已经到达最后一条记录,我们可以打印 div "moreEventsContainer"。
  • @Paul 你对 sizeof() 或增量还有其他疑问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多