首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据某些条件对多维数组求和?

如何根据某些条件对多维数组求和?
EN

Stack Overflow用户
提问于 2019-06-03 03:18:31
回答 1查看 88关注 0票数 1
代码语言:javascript
复制
 $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中取最好的。

因此,求和结果如下所示:

代码语言:javascript
复制
Array
(
  [5] => Array
    (
        [score] => 300
    )
[6] => Array
    (
        [score] => 310
    )
[7] => Array
    (
        [score] => 305
    )
)

我试过foreach,但我不能解决这个问题。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-06-03 05:58:42

在这里,我们可以首先将所有三个数组相加,然后根据条件进行减法,我们的代码将如下所示:

代码语言:javascript
复制
$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条件,或者不太可能期望的输出是不正确的。但是,调试它应该不难。

输出

代码语言:javascript
复制
array(3) {
  [5]=>
  array(1) {
    ["score"]=>
    int(300)
  }
  [6]=>
  array(1) {
    ["score"]=>
    int(310)
  }
  [7]=>
  array(1) {
    ["score"]=>
    int(300)
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56418183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档