2017-08-01 96 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

我不'因为它已经是内存中的对象而不是数据库的查询了,但你可以这样做...... –