如何解决如果PHP Laravel中有相同的键,如何从关联数组中求和
像这样的简单代码:
$array = [
[11 => 771725],[11 => 847226],[10 => 410035],[11 => 455387],];
dd($array);
输出:
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中,您可以使用key和reset获取第一个键和值。
$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
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。