Laravel 带空值的拉威尔平均值
我试图对数据库表中的每一行进行平均。但是它不能正常工作,我想忽略这个值,如果为null,它将不会计算为零。在我的代码中,它将空值计算为零,我想像MS Excel那样,如果行/单元格为空,它将忽略 控制器代码:Laravel 带空值的拉威尔平均值,laravel,average,Laravel,Average,我试图对数据库表中的每一行进行平均。但是它不能正常工作,我想忽略这个值,如果为null,它将不会计算为零。在我的代码中,它将空值计算为零,我想像MS Excel那样,如果行/单元格为空,它将忽略 控制器代码: public function update_average(Request $request) { $scores = $request->input('scores'); //here scores is the input array p
public function update_average(Request $request)
{
$scores = $request->input('scores'); //here scores is the input array param
foreach($scores as $row){
$score = cie_score::find($row['id']);
$score->term2_average =round( ($row['term1_result'?: null] + $row['term2_result'?: null]) /2);
$score->term3_average =round( ($row['term1_result'?: null] + $row['term2_result'?: null] + $row['term3_result'?: null])/3);
$score->term4_average =round( ($row['term1_result'?: null] + $row['term2_result'?: null] + $row['term3_result'?: null] + $row['term4_result'?: null])/4);
$score->save();
}
return redirect()->back();
}
图像结果
您可以计算您要查找的内容,如下所示:
$currentTerm = 4;
$scores = $request->input('scores');
for ($term = 1; $term <= $currentTerm; $term++) {
foreach ($scores as $row) {
$score = cie_score::find($row['id']);
$total = 0;
$terms = 0;
for ($i = 1; $i <= $term; $i++) {
$total += $row['term'.$i.'_result'] ?? 0;
$terms += empty($row['term'.$i.'_result']) ? 0 : 1;
}
$key = 'term'.$term.'_average';
if ($terms > 0) {
$score->$key = round($total/$terms);
} else {
$score->$key = 0;
}
$score->save();
}
}
$currentTerm=4;
$scores=$request->input('scores');
对于($term=1;$term$key=round($total/$terms);
}否则{
$score->$key=0;
}
$score->save();
}
}
这将计算从1到当前项的所有项的平均值。如果“项{$i}\u结果”为空,则在总数中忽略它,并且不会计入除数
您的db执行以下操作更有效:
$currentTerm = 4;
$averages = [];
$scores = $request->input('scores');
for ($term = 1; $term <= $currentTerm; $term++) {
foreach ($scores as $row) {
$id = $row['id'];
if (!isset($averages[$id])) {
$averages[$id] = [];
}
$total = 0;
$terms = 0;
for ($i = 1; $i <= $term; $i++) {
$total += $row['term'.$i.'_result'] ?? 0;
$terms += empty($row['term'.$i.'_result']) ? 0 : 1;
}
$key = 'term'.$term.'_average';
if ($terms > 0) {
$averages[$id][$key] = round($total/$terms);
} else {
$averages[$id][$key];
}
}
foreach($averages as $id => $data) {
cie_score::where('id', $id)
->update($data);
}
}
$currentTerm=4;
$averages=[];
$scores=$request->input('scores');
对于($term=1;$term$数据){
cie_分数::其中('id',$id)
->更新(数据);
}
}
当您使用NULL
添加数字时,结果将是NULL
。请使用0而不是NULL,