2017-04-24 113 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