PHP Sum Like Elements
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP Sum Like Elements相关的知识,希望对你有一定的参考价值。
我有一个php数组,我想总结每个重复元素的所有值,然后返回一个最后一个数组与总和...这是样本数组
[0] => Array
(
[purchase_amount] => 5000.00
[listing_price] => 5000.00
[home_warranty_cost] => 10.00
[emd] => 100.00
[fee] => 10.00
)
[1] => Array
(
[purchase_amount] => 0.00
[listing_price] => 0.00
[home_warranty_cost] => 10.00
[emd] => 100.00
[fee] => 10.00
)
[2] => Array
(
[purchase_amount] => 15000.00
[listing_price] => 15000.00
[home_warranty_cost] => 10.00
[emd] => 100.00
[fee] => 10.00
)
而且我想最终得到这个......
(
[purchase_amount] => 20000.00
[listing_price] => 20000.00
[home_warranty_cost] => 30.00
[earnest_money_amount] => 300.00
[tc_fee] => 30.00
)
是否有一个简单的功能来执行此操作,还是需要编写for循环?
答案
这非常适合array_reduce
[doc],无论你的关键名称如何都适用。
array_reduce
的回调函数应用于输入数组的每个元素,并采用累加器$carry
和当前元素$item
。如果累加器为空,这是缩减过程中的第一个元素,因此我们可以进行直接赋值。否则,循环遍历当前元素的条目并将值添加到累加器。
array_reduce($data, function ($carry, $item) {
if (!$carry) {
$carry = $item;
}
else {
foreach ($item as $k => $v) {
$carry[$k] += $v;
}
}
return $carry;
});
结果:
Array
(
[purchase_amount] => 20000
[listing_price] => 20000
[home_warranty_cost] => 30
[emd] => 300
[fee] => 30
)
另一答案
我会做这样的事情。键上还有一个循环,但每次都不要列出所有字段是必要的......
$sums = array_reduce($data, function ($carry, $item) {
foreach ($item as $key => $value)
{
$carry[$key] = array_key_exists($key, $carry) ? $carry[$key] + $item[$key] : 0;
}
return $carry;
}, []);
Working example在这里。
以上是关于PHP Sum Like Elements的主要内容,如果未能解决你的问题,请参考以下文章