微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果PHP Laravel中有相同的键,如何从关联数组中求和

如何解决如果PHP Laravel中有相同的键,如何从关联数组中求和

像这样的简单代码

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

输出

enter image description here

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

["410035"]

11月11日有3种价格:

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

并且在12月(12)处没有

我需要逻辑来计算第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,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],];

$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,预设和数组,并使用array_fill_keys将1-12个月作为键,将0用作值。

在foreach中,您可以使用keyreset获取第一个键和值。

$array = [
    [11 => 771725],];

$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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。