foreach里面的回声内容只有一次

时间:2013-05-31 23:41:30

标签: php

我试图回复一次foreach中的内容。此时,当用户填写表单时,将显示每个跳过的记录的消息。如果跳过35条记录,由于foreach,我将收到35条消息。我想避免这种情况,并且只能为整个结果页面显示一个回声。我怎样才能做到这一点?我想我可能不得不在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; 
           }
        }
    }
}

7 个答案:

答案 0 :(得分: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/>';
}

答案 1 :(得分:2)

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

$warningEmitted = false;

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

if(!$warningEmitted) {
    // echo warning here. 
    $warningEmitted = true;
}

答案 2 :(得分: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;
}

答案 3 :(得分:1)

在循环之外假定$count=1;

在循环中,你可以放一个if语句。

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

希望这有帮助。

答案 4 :(得分:0)

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

然后你可以在循环结束后检查布尔值,以决定是否需要显示消息。

答案 5 :(得分:0)

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

答案 6 :(得分: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; 
        }
    }
}

上面我还将“if logged in”条件移到了循环之外(所以它只检查过一次)。

需要考虑的事项:

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