2013-06-01 48 views
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>

我怎樣才能得到上面顯示只有當如果條件得到滿足,併爲消息dissapear如果沒有顯示的記錄?

+0

對我來說聽起來像你想做的事(我也不確定是否完全理解了你)應該在數據庫查詢中完成 - 而現在你似乎正在加載所有記錄,然後做一些簡單的過濾腳本的一面。 – CBroe

回答

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/>'; 
} 
+0

實際上從$課程中刪除元素可能不是一個好主意,因爲如果在課程的任何位置使用$課程,它可能會引入新的錯誤 – Abhay

+1

您是對的,儘管我懷疑它會在稍後使用,因爲此代碼只是顯示一個搜索結果。不過,我正在編輯我的答案以擺脫unset(),感謝您的評論。 @Abhay – Lazzaro

0

使用count($ lessons)來顯示計數是不正確的,因爲$ lesson可能包含您不想顯示的記錄。相反,你應該創建另一個計數器變量(比如$ countLesson);將其設置爲0,並在$ found = false時將其增加到您的foreach中。這個計數器變量會給你正確的計數。

因爲如果沒有記錄不顯示的消息,你可以使用:

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

希望它能幫助!

相關問題