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
)

Try it!

另一答案

我会做这样的事情。键上还有一个循环,但每次都不要列出所有字段是必要的......

$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的主要内容,如果未能解决你的问题,请参考以下文章

1 代码片段1

SQLite的LIKE语句实现字符片段筛选的功能

SQLite的LIKE语句实现字符片段筛选的功能

SQLite的LIKE语句实现字符片段筛选的功能

SQLite的LIKE语句实现字符片段筛选的功能

maximum sum of a subarray with at-least k elements.