如果 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
)
像这样的简单代码:
$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
)