如果 php laravel 中有相同的键,如何对关联数组中的值求和

How to sum values from associative array if there is the same key in php laravel

像这样的简单代码:

        $array = [
            [11 => 771725],
            [11 => 847226],
            [10 => 410035],
            [11 => 455387],
        ];
        dd($array);

输出:

OCTOBER (10) 的结果有 1 个价格:

["410035"]

11 月 (11) 有 3 个价格:

["771725", "847226", "455387"]

并且在 12 月 (12) 是 none

我需要逻辑来计算第 10、11 和 12 个月的所有价格。 预期输出为

[
    10 => "2074338",
    11 => "410035",
    12 => "0"
]

谢谢:)

我使用了 Collection 并得到了正确的结果。这可以通过多种方式实现:

方法 1:

collect($array)
    ->groupBy(function ($item) {
        return collect($item)->keys()->first();
    })
    ->map(function ($items) {
        return collect($items)->flatten()->sum();
    });

方法 2:

collect($array)
    ->groupBy(function ($item) {
        return array_key_first($item);
    })
    ->map(function ($items) {
      return collect($items)->flatten()->sum();
    });

方法 3:

$default = [
    1 => 0, 
    2 => 0,
    3 => 0,
    4 => 0,
    5 => 0,
    6 => 0,
    7 => 0,
    8 => 0,
    9 => 0,
    10 => 0,
    11 => 0,
    12 => 0,
];

collect($array)
    ->reduce(function ($carry, $item) {
        $month = array_key_first($item);
  
        $carry[$month] += $item[$month];
  
        return $carry;
    }, $default);

请看下面我的做法

如题...

$array = [
            [11 => 771725],
            [11 => 847226],
            [10 => 410035],
            [11 => 455387],
        ];

$monthTotals = [
            10 => 0, 
            11 => 0, 
            12 => 0
        ];

foreach ($array as $value) {
    foreach($value as $key => $amount)
    {
        if(isset($monthTotals[$key]))
        {
            $monthTotals[$key] += $amount;
        }
    }
}

print_r($monthTotals);

建议...

注意:由于您是在 9 月份发布的,因此我假设您正在寻找接下来 3 个月的数据。以下将始终显示未来 3 个月的数据...

$array = [
            [11 => 771725],
            [11 => 847226],
            [10 => 410035],
            [11 => 455387],
        ];

$datePlus1 = date('m', strtotime('+1 month'));
$datePlus2 = date('m', strtotime('+2 month'));
$datePlus3 = date('m', strtotime('+3 month'));

$monthTotals = [
            $datePlus1 => 0, 
            $datePlus2 => 0, 
            $datePlus3 => 0
        ];

foreach ($array as $value) {
    foreach($value as $key => $amount)
    {
        if(isset($monthTotals[$key]))
        {
            $monthTotals[$key] += $amount;
        }
    }
}

print_r($monthTotals);

您可以使用单个 foreach 和 pre-set 以及数组,其中月份 1-12 作为键,0 作为值使用 array_fill_keys

在 foreach 中,您可以使用 key and reset.

获取第一个键和值
$array = [
    [11 => 771725],
    [11 => 847226],
    [10 => 410035],
    [11 => 455387],
];

$result = array_fill_keys(range(1,12), 0);
foreach ($array as $a) {
    $result[key($a)] += reset($a);
}

print_r($result);

输出

Array
(
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 410035
    [11] => 2074338
    [12] => 0
)

Php demo