0

我有这个 foreach 来显示个别课程。但是,正如您在下面的代码中看到的那样,我省略了一些记录。此外,通过使用$found我将消息最小化为一条消息。

$found = false;

foreach($lessons as $lesson)
{
    if(Auth::LoggedIn())
    {
       if(Auth::$userinfo->rank == 'Student')
       {
           if($lesson->aircraft == 'C172')
           {
                $found = true;
                break;
           }
           if($lesson->theory == '1')
           {
                $found = true;
                break;
           }
       }

     /* Actual foreach data here, a table row displaying a result */
}
if($found)
{
    echo '<div class="msg-yellow"><strong>A selection of lessons could not be displayed, because you have to complete other lessons first.</strong></div><br/>';
}

我想知道如何对另一条消息进行反之亦然的解决方案。基本上,我有这条消息计算找到的所有记录。我希望消息消失,如果没有显示记录,而且我发现每当记录被隐藏时,下面的解决方案仍然会计算它们。

比如说,数据库中有 50 条记录,$if(lesson->aircraft == 'C172'会遗漏 6 条记录。它应该显示为 44,而不是 50,就像它一样。我想这是因为count我在 foreach 之外,在它之上,所以它计算了条件之前的所有记录。

<div class="msg-blue"><strong>Your search criteria returned <?php echo count($lessons); ?> lessons available for booking.</strong>

如何仅在满足 if 条件时才显示上述内容,并且如果没有显示任何记录,则消息消失?

4

2 回答 2

0

统计隐藏结果的个数,从总结果中减去,得到实际显示的结果个数。要在未显示结果时隐藏消息,只需检查此差异是否大于 0。为了保持表的顺序,必须将表缓存在变量中($table在本例中),直到显示搜索结果的数量。

$hidden_count = 0;
$table = "";
foreach($lessons as $key => $lesson)
{
    if(Auth::LoggedIn())
    {
       if(Auth::$userinfo->rank == 'Student')
       {
           if($lesson->aircraft == 'C172')
           {
                $hidden_count += 1;
                break;
           }
           if($lesson->theory == '1')
           {
                $hidden_count += 1;
                break;
           }
       }

     /* Actual foreach data here, a table row displaying a result, not echoed but appended to $table */
}
$count_after = count($lessons) - $hidden_count;

echo '<div class="msg-blue"><strong>Your search criteria returned $count_after flights available.</strong>';
echo $table;

$count_diff = $count_before - $count_after;
if($hidden_count > 0 && $count_after > 0)
{
    echo '<div class="msg-yellow"><strong>$count_diff lessons could not be displayed, because you have to complete other lessons first.</strong></div><br/>';
}
于 2013-06-01T17:06:21.530 回答
0

使用 count($lessons) 显示计数是不正确的,因为 $lessons 可能包含您不想显示的记录。相反,您应该创建另一个计数器变量(例如 $countLesson);在顶部将其设置为 0,并在 $found=false 时在您的 foreach 中将其递增。这个计数器变量会给你正确的计数。

如果没有记录,则不显示消息,您可以使用:

if ($countLesson > 0) {
    // display message
}

希望能帮助到你!

于 2013-06-01T17:09:28.680 回答