簡體   English   中英

多維數組中的總和值

[英]Sum values in an multi-dimensional array

我想對以下數組的值求和,我想通過對它們進行組合來對它們進行分組,輸出格式也將是數組

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
        )

     )
)

您可以將簡單的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

您可以將splat運算符與array_merge一起使用,然后遍歷數組

$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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM