2017-04-24 68 views
0

我有我想要在視圖中使用的正確數據,但我想稍微更改它在控制器中,因此它更容易呈現在視圖中。遍歷數組計算得分返回除零除

每個'問題'將總是有6個答案(score)。每個score是一個整數。

,我想在每一個問題的答案進行計算是:

所以在下面的例子中,答案陣列的24 => array:1 [▼內:

  1. 獲取指數1的比分,和將其除以指數0中的得分。
  2. 獲得指數3的得分,併除以指數2的得分。
  3. 得到指數5的得分,併除以指數4的得分。

所以在三次迭代結束時,答案中會有3個值。然後它將轉到25 => array:1 [▶]並執行與上面相同的操作。

微小的問題是除數可能爲0,這會導致除以0的錯誤。我試圖用循環內的if語句來緩解這個問題。

高電平陣列($groupedQuestionsAudit)概述:陣列內

array:7 [▼ 
    24 => array:1 [▼ 
    "answers" => array:6 [▼ 
     0 => ReAudit {#517 ▶} 
     1 => ReAudit {#518 ▶} 
     2 => ReAudit {#519 ▶} 
     3 => ReAudit {#520 ▶} 
     4 => ReAudit {#521 ▶} 
     5 => ReAudit {#522 ▶} 
    ] 
    ] 
    25 => array:1 [▶] 
    26 => array:1 [▶] 
    27 => array:1 [▶] 
    29 => array:1 [▶] 
    30 => array:1 [▶] 
    31 => array:1 [▶] 
] 

節確認得分變量:

array:7 [▼ 
    24 => array:1 [▼ 
    "answers" => array:6 [▼ 
     0 => ReAudit {#517 ▼ 
     #original: array:9 [▼ 
      "id" => 337 
      "score" => 8 
      "created_at" => null 
      "updated_at" => null 
     ] 
     } 
     1 => ReAudit {#518 ▶} 

當前迭代:

foreach ($groupedQuestionsAudit as $score) { 
    foreach ($score as $value) { 
     for ($i = 0; $i <= 3; $i++) { 
      for ($o = 1; $o <= 4; $o++) { 
       if ($value[$o]->score == 0) { 
        $answers['answers'][] = 0; 
       } else { 
        $answers['answers'][] = $value[$o]->score/$value[$i]->score; 
       } 
      } 
     } 
    } 
} 

我上面的想法是循環遍歷每個問題,並使用一個額外的for循環來啓動上一個索引之上的1個索引。然後我可以執行index 1's score/index 0's score的計算。我不認爲這工作正常不過,因爲如果我暫時0檢查刪除的劃分,則返回112個結果(不包括在其各自的問題陣列是),像這樣:

array:1 [▼ 
    "answers" => array:112 [▼ 
    0 => 0 
    1 => 1.5 
    2 => 1 
    3 => 1.5 
    4 => 0 
    5 => 0 
    6 => 0 
    7 => 0 

錯誤本身是:

ErrorException在Controller.php這樣行356:被零除 這是上線$answers['answers'][] = $value[$o]->score/$value[$i]->score;

我不確定爲什麼我用0得到一個師,當我不顧C如果除數爲零則進行計算。

非常感謝。

回答

0

它可以簡化一下。你只需要在你的主循環中嵌套一個循環。您可以添加一個來獲取分子的索引。

foreach ($groupedQuestionsAudit as $key => $scores) { 
    for ($i=0; $i < 6; $i += 2) { 
     $divisor = $scores['answers'][$i]->score; 
     $numerator = $scores['answers'][$i+1]->score; 
     $answers[] = $divisor ? $numerator/$divisor : 0; 

     // or $answers[$key][] = $divisor ? $numerator/$divisor : 0; 
     // to group the results by the key from $groupedQuestionsAudit 

    } 
} 

我使用的三元進行計算:$answers[] = $divisor ? $numerator/$divisor : 0;。這是可能的,因爲0將評估爲false,而其他任何數字都不會。

+0

謝謝!這工作完美。 '$ i + 1'來得到上面的索引..爲什麼我總是在複雜的事情!再次感謝。 – Ben