簡體   English   中英

多維數組中具有相同鍵值的總和值

[英]Sum values in Multiple Dimensional array that have same key value

我有一個多維數組,我需要對具有相同鍵的值求和。
的print_r($輸入)

Array
(
    [0] => Array
        (
            [id] => colors
            [power] => Array
                (
                    [green] => 12
                    [red] => 5
                    [orange] => 9
                    [black] => 6
                    [white] => 5
                    [blue] => 11
                )

        )

    [1] => Array
        (
            [id] => colors
            [power] => Array
                (
                    [green] => 20
                    [red] => 40
                    [orange] => 80
                    [black] => 60
                    [white] => 100
                    [blue] => 110
                )

        )
    [2] => Array
        (
            [id] => glossycolor
            [power] => Array
                (
                    [green] => 20
                    [red] => 40
                    [orange] => 80
                    [black] => 60
                    [white] => 100
                    [blue] => 110
                )

        )

)

我需要結果像

Array
(
    [0] => Array
        (
            [id] => colors
            [power] => Array
                (
                    [green] => 32
                    [red] => 45
                    [orange] => 89
                    [black] => 66
                    [white] => 105
                    [blue] => 121
                )

        )

    [1] => Array
        (
            [id] => glossycolor
            [power] => Array
                (
                    [green] => 20
                    [red] => 40
                    [orange] => 80
                    [black] => 60
                    [white] => 100
                    [blue] => 110
                )

        )

)

我試圖使用array_shift對值進行排序並對子數組值求和,但是我失敗了

$finalRate = array_shift($inputs);
                foreach ($inputs as $val) {
                    foreach ($val as $key => $val) {
                        $finalRate[$key] += $val;
                    }
                }

但失敗並返回空數組。

$array1 = array_slice($input,0,1);  //slicing first value of $input i.e Array([0]=>array)
$array2 = array_slice($input,1,1);  //slicing second value of $input i.e Array([1]=>array)
$array = array_sum_values($array1,$array2); //summing values of two arrays
$input = array_splice($input,0,2,$array) //Removing [0] and [1] from $input and replacing with $array.

有關更多詳細信息,請參考PHP手冊。

假設您的數組始終具有與我相同的結構:

$outcome = array();
foreach ($colors as $array) {
    $id = $array['id'];

    if (array_key_exists($id, $outcome)) {
        foreach ($array['power'] as $color => $value) {
            $outcome[$id]['power'][$color] += $value;
        }
        continue;
    }
    $outcome[$array['id']] = $array;
}
array_values($outcome);

這可能不是解決此問題的最有效方法。但是它有效且易於實現:

$arr = array(
    0 => array(
        'id' => 'colors',
        'power' => array(
            'green' => 12,
            'red' => 5,
            'orange' => 9,
            'black' => 6,
            'white' => 5,
            'blue' => 11,
        ),
    ),
    1 => array(
        'id' => 'colors',
        'power' => array(
            'green' => 20,
            'red' => 40,
            'orange' => 80,
            'black' => 60,
            'white' => 100,
            'blue' => 110,
        ),
    ),
    2 => array(
        'id' => 'glossycolors',
        'power' => array(
            'green' => 20,
            'red' => 40,
            'orange' => 80,
            'black' => 60,
            'white' => 100,
            'blue' => 110,
        ),
    ),
);

foreach ( $arr as $k1 => $v1 ) {
    foreach ( $arr as $k2 => $v2 ) {
        if ( $k1 === $k2 ) continue;
        if ( ! isset( $arr[ $k1 ] ) || ! isset( $arr[ $k2 ] ) ) continue;
        if ( $v1['id'] === $v2['id'] ) {
            foreach ( $v2['power'] as $power_k => $power_v ) {
                $arr[$k1]['power'][$power_k] += $power_v;
            }
            unset( $arr[$k2] );
        }
    }
}

print_r( $arr );

結果是:

Array
(
    [0] => Array
        (
            [id] => colors
            [power] => Array
                (
                    [green] => 32
                    [red] => 45
                    [orange] => 89
                    [black] => 66
                    [white] => 105
                    [blue] => 121
                )

        )

    [2] => Array
        (
            [id] => glossycolors
            [power] => Array
                (
                    [green] => 20
                    [red] => 40
                    [orange] => 80
                    [black] => 60
                    [white] => 100
                    [blue] => 110
                )

        )

)

因此,基本上,它會循環遍歷同一數組兩次,並對常見的“ id”元素的值求和,然后從數組中刪除第二個副本,只保留原始副本和后面的總和。 干杯

暫無
暫無

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

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