Здесь мы можем сначала добавить все наши три массива, затем вычесть их в зависимости от условий, и наши коды будут выглядеть так:
$arr = [[
'5' => [
'BG' => 50,
'CH' => 60,
'LG' => 50,
'MT' => 40,
'MO' => 80,
'PH' => 60,
'GE' => null,
],
], [
'6' => [
'BG' => 90,
'CH' => 60,
'LG' => 60,
'MT' => 50,
'MO' => null,
'PH' => 50,
'GE' => null,
],
], [
'7' => [
'BG' => 80,
'CH' => 55,
'LG' => 65,
'MT' => 50,
'MO' => null,
'PH' => 50,
'GE' => 55,
],
],
];
$sum_arr = array();
foreach ($arr as $key => $arr2) {
foreach ($arr2 as $key2 => $value) {
$sum_arr[$key2]["score"] = array_sum(array_values($value));
$temp = [$value["BG"], $value["MT"], $value["GE"]];
arsort($temp);
if ($value["MO"] === null) {
$sum_arr[$key2]["score"] -= $temp[2];
} elseif ($value["MO"] != null && $value["MO"] >= 0) {
$sum_arr[$key2]["score"] -= $temp[2] + $temp[1];
} else {
continue;
}
}
}
var_dump($sum_arr);
Либо в моем коде есть ошибка, скорее всего, или я неправильно понял условия if
, или менее вероятно, что требуемый вывод может быть неправильным. Тем не менее, это не должно быть сложно отладить его.
выход
array(3) {
[5]=>
array(1) {
["score"]=>
int(300)
}
[6]=>
array(1) {
["score"]=>
int(310)
}
[7]=>
array(1) {
["score"]=>
int(300)
}
}