$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
]
]
];
对于每个id 5,6和7,我想把分数加起来。CH、PH、MO和LG将始终是必须总结的。但在总结完必填项之后,我想根据以下条件总结另一项。如果MO为空,则从BG、MT和GE中取最好的两个。如果MO不为空或大于或等于0,我想从BG、MT或GE中取最好的。
因此,求和结果如下所示:
Array
(
[5] => Array
(
[score] => 300
)
[6] => Array
(
[score] => 310
)
[7] => Array
(
[score] => 305
)
)
我试过foreach
,但我不能解决这个问题。我该如何解决这个问题?
发布于 2019-06-03 05:58:42
在这里,我们可以首先将所有三个数组相加,然后根据条件进行减法,我们的代码将如下所示:
$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)
}
}
https://stackoverflow.com/questions/56418183
复制相似问题