4

我试图在 foreach 中回显内容一次。目前,当用户填写表单时,会针对跳过的每条记录显示该消息。如果跳过了 35 条记录,我将收到 35 条消息,因为 foreach。我想避免这种情况,并且能够为整个结果页面只显示一个回显。我怎样才能做到这一点?我想我可能必须在 foreach 之外执行此操作,但我不知道如何将它从 foreach 中取出。

foreach($allcourses as $course)
{
    if(Auth::LoggedIn())
    {
       if(Auth::$userinfo->rank == 'Student')
       {
           if($course->aircraft == '1')
           {
               echo '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
               continue; 
           }
           if($course->aircraft == '2')
           {
               echo '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
               continue; 
           }
        }
    }
}
4

7 回答 7

5

假设您必须维护该对象的结构,则如果$course->aircraft == 1相应地回显,则可以只进行布尔更新:

$found = false;
foreach($allcourses as $course)
{
    if(Auth::LoggedIn())
    {
       if(Auth::$userinfo->rank == 'Student')
       {

           if($course->aircraft == '1')
           {
               $found = true;
           }
        }
    }
}
if($found)
{
    echo '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
}
于 2013-05-31T23:45:22.483 回答
3

在这种情况下,您可以设置一个简单的标志变量。

$warningEmitted = false;

然后,在发出警告之前的循环中:

if(!$warningEmitted) {
    // echo warning here. 
    $warningEmitted = true;
}
于 2013-05-31T23:49:13.367 回答
1

循环外假设$count=1;

在循环内,您可以放置​​一个 if 语句。

if($count==1) { $count++; echo "Whatever";}

希望这可以帮助。

于 2014-02-07T17:46:01.390 回答
1

最好的选择可能是将您的消息设置为变量,然后在 foreach 完成后回显该变量。

foreach($allcourses as $course)
{
    if(Auth::LoggedIn())
    {
        if(Auth::$userinfo->rank == 'Student')
        {
            if($course->aircraft == '1')
            {
                $message = '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
                continue; 
            }
        }
    }
}
if(isset($message))
{
    echo $message;
}
于 2013-05-31T23:50:03.387 回答
0

假设我对您的理解正确,我认为您想在发现问题后立即使用“break”停止循环。

if (Auth::LoggedIn() && Auth::$userinfo->rank == 'Student') {
    foreach ($allcourses as $course) {
        if ($course->aircraft == '1') {
            echo '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
            break; 
        }
        if ($course->aircraft == '2') {
            echo '<div class="msg-red">Some lessons could not be found, because you may not be entitled to view/book them at this stage of your course.</div><br/>';
            break; 
        }
    }
}

上面我还将“如果登录”条件移到了循环之外(所以它只检查一次)。

需要考虑的事情:

一种更加用户友好的方法可能是将每个错误添加到一个数组中 - 而不是使用 echo & breakout - 然后在最后循环遍历该错误数组,显示有关错误的更多信息,以便它们可以由最终用户(当然取决于您的表单的工作方式)。

于 2013-06-01T00:22:05.993 回答
0

只需使用最初设置为 false 的布尔变量,如果匹配,则在循环中将其设置为 true。

然后您可以在循环完成后检查布尔值以确定是否需要显示消息。

于 2013-05-31T23:45:20.833 回答
0

创建附加变量,无论消息是否已显示,您都将在其中存储信息。当你显示它时,将 var 设置为 true。

于 2013-05-31T23:45:23.970 回答