2017-08-01 120 views
0

我有一個提交模型並使用查詢,我得到了所有提交的列表。然後,爲了進入每個提交,我使用的是循環計算對象內元素的數量

foreach ($submissions as $submission) { 

} 

每個提交具有以下元素

[original:protected] => Array 
(
    [id] => 1 
    [sessionKey] => dfshduifhsduifhsdiu 
    [number]  => 9 
    [isCompleted] => 0 
    [created_at] => 2017-07-29 23:14:02 
    [updated_at] => 2017-07-30 00:04:00 
) 

我所試圖做的是生產出輸出所有的一些細節的數組意見書。我需要的第一件事是提交的總數。接下來我需要完整的數(isComplete = 1)和不完整的(isComplete = 0)記錄。爲了實現這一點,我做

function submissionSummary($submissions) { 
    $reportArray = array(); 
    $totalCount = 0; 
    $incompleteCount = 0; 
    $completeCount = 0; 

    foreach ($submissions as $submission) { 

     $totalCount += count($submission); 
     $reportArray["total"] = $totalCount; 

     if($submission['isCompleted'] === "0") { 
      $incompleteCount += count($submission); 
      $reportArray["incomplete_count"] = $incompleteCount; 
     } elseif ($submission['isCompleted'] === "1") { 
      $completeCount += count($submission); 
      $reportArray["complete_count"] = $completeCount; 
     } 
    } 

    return $reportArray; 
} 

我不知道是否有這樣做的更effecient方式?

現在我掙扎的部分是數字元素。這個數字可以是1到9之間的任何數字。我想要做的是計算每個數字的數量。所以我想看看有多少個意見書有一個數字元素1,多少個有2個等等。我能想到的唯一方法就是通過很多if語句,如果可能的話,我想避免。

任何關於如何構建這個正確的讚賞的建議。

感謝

+0

是否提交的數據來自一個SQL語句或從其他來源? – Spingolini

+0

它來自Elequent查詢使用 - > get() –

回答

3

最簡單的方法是刪除的foreach,只是做:

function submissionSummary($submissions){ 
    $report = []; // or array() if you prefer 
    $report['completeCount'] = $submissions->where('isCompleted', 1)->count(); 
    $report['inCompleteCount'] = $submissions->where('isCompleted', 0)->count(); 
    $report['totalCount'] = $submissions->count(); 

    return $report; 
} 
+0

我會總結$ report ['completeCount']和$ report ['inCompleteCount']以避免一個更簡單的選擇 – ggderas

+0

謝謝,這是完美的 –

+0

我不'因爲它已經是內存中的對象而不是數據庫的查詢了,但你可以這樣做...... –