我有这个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条件才能显示上述内容,如果没有显示记录,如何显示消息?
答案 0 :(得分: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/>';
}
答案 1 :(得分:0)
使用count($ lessons)显示计数是不正确的,因为$课程可能包含您不想显示的记录。相反,你应该创建另一个计数器变量(比如$ countLesson);将其设置为顶部的0,并在$ found = false时在foreach中增加它。此计数器变量将为您提供正确的计数。
如果没有记录,则不显示消息,您可以使用:
if ($countLesson > 0) {
// display message
}
希望它有所帮助!