多维数组中的总和值

时间:2019-06-20 10:02:05

标签: php arrays

我想对以下数组的值求和 我想通过累加将相同的项目分组,输出格式也将是数组

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => R421_FD03
                    [1] => 1
                )

            [1] => Array
                (
                    [0] => R421_FD03
                    [1] => 1
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => R421_FD03
                    [1] => 1
                )

            [1] => Array
                (
                    [0] => R421_FD02
                    [1] => 1
                )

        )

)

我测试了这段代码,但结果却不是我正在等待的代码:

$sumArray = array();

        array_walk_recursive($data, function($item, $key) use (&$sumArray){
            $sumArray[$key] = isset($sumArray[$key]) ?  $item + $sumArray[$key] : $item;
        });

我等待的结果就是这个

Array
(
    [0] => Array
        (
            [0] => R421_FD03
            [1] => 3
        )

    [1] => Array
        (
            [0] => R421_FD02
            [1] => 1
        )

     )
)

2 个答案:

答案 0 :(得分:0)

您可以将简单的foreach()array_values()一起应用

$final_array = [];

foreach($array as $arr){
    foreach($arr as $ar){
        $final_array[$ar[0]][0] = $ar[0];
        $final_array[$ar[0]][1] = (isset($final_array[$ar[0]][1])) ?  $final_array[$ar[0]][1] + $ar[1] : $ar[1];
    }

}

$final_array = array_values($final_array);
print_r($final_array);

输出:-{https://3v4l.org/lABWG

答案 1 :(得分:0)

您可以将array_merge与splat运算符配合使用,然后遍历数组

$merged = array_merge(...$arr);//splat operator
$r = [];
array_walk($merged, function($v,$k) use(&$r){
 array_key_exists($v['0'], $r) ? ($r[$v[0]] += $v['1']) : ($r[$v[0]] = $v[1]);
});
print_r($r);

结果:-

Array
(
 [R421_FD03] => 3
 [R421_FD02] => 1
)