我想在视图中使用正确的数据,但我想在Controller中略微更改它,因此在视图中更容易呈现。
每个问题'将始终有6个答案(score
)。每个score
都是一个整数。
我想在每个问题的答案中执行的计算是:
所以在下面的例子中,在24 => array:1 [▼
的答案数组中:
因此,在三次迭代结束时,答案中将有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
错误本身是:
Controller.php第356行中的ErrorException:除以零 在
行$answers['answers'][] = $value[$o]->score / $value[$i]->score;
我不确定为什么我将除数除以0,如果除数为零,我忽略计算。
非常感谢。
答案 0 :(得分: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,而任何其他数字都会被评估为