获取数组内的数组总和

Posted

技术标签:

【中文标题】获取数组内的数组总和【英文标题】:Get sum of arrays inside array 【发布时间】:2019-04-08 13:17:08 【问题描述】:

我如何得到这个数组的 sum

$arrays = [[0, 176000], [0,500], [0, 3960000]];

输出应该是:

$arrays = [0, 4136500];

任何帮助将不胜感激。

【问题讨论】:

你的数组是错误的,否则你的输出是不正确的! 你说错了什么? , 是数组中的元素分隔符。数字不使用它。 好的,已经更新了我的数组。 到目前为止你尝试了什么? 【参考方案1】:

对第一个 array_map 使用可变参数和 null 回调:

$arrays = [[0, 176000], [0,500], [0, 3960000]];
print_r(array_map('array_sum', array_map(null, ...$arrays)));

【讨论】:

我得到这个错误:“array_sum() 期望参数 1 是数组,给定整数” @u_mulder 我用 return 而不是 print_r。 由于@Nick 提供了一个 working 小提琴,那么我想您向我们展示了不正确的数据或错误地应用了我的代码。【参考方案2】:

在 Larevel 中你可以使用collections。例如:

    $a = collect([[0, 176000], [0,500], [0, 3960000]]);
    $b = new Collection;
    foreach ($a as $k => $e) 
        $b->push ( $a->pluck($k)->sum() );
    

    $c = $b->take(2); // Result is going to be here

【讨论】:

谢谢。但我得到了 3 个项目 [ 0, 4136500, 0 ]。应该是 [0, 4136500] 但是 $b->take(2) 会是动态的,我可以采取 3 在你的情况下尝试在循环中使用$c = $b->take($e->count()); $e 超出范围?【参考方案3】:

这是使用原生方式(但我认为需要返工)

<?php
$arrays = [[0, 176000], [0,500], [0, 3960000]];
$new_arrays = [];
foreach ($arrays as $key => $val) 
  $new_arrays[0] += $val[0];
  $new_arrays[1] += $val[1];

print_r($new_arrays);

【讨论】:

谢谢。我认为是因为数组索引应该是动态的。 您能更具体地说明您想要实现的目标吗? @杰尔森 $ilubis 如果我有 [[0,17600, 200]]【参考方案4】:

如果没有要跟踪的密钥,U_mulders 答案有效。

如果你有一个关联数组,那么你需要循环数组并构建添加如下值:

$arrays = [[0,"A" => 176000], [0, "b" => 500], [0, 3960000, 200], [10, 500, 200]];

foreach($arrays as $sub)
    foreach($sub as $key => $num)
        if(!isset($new[$key])) $new[$key] =0;
        $new[$key] += $num;
    

var_dump($new);

输出:

array(5) 
  [0]=>
  int(10)
  ["A"]=>
  int(176000)
  ["b"]=>
  int(500)
  [1]=>
  int(3960500)
  [2]=>
  int(400)

https://3v4l.org/NbNVg

【讨论】:

是的 mulder 答案对于原生 php 是正确的,但对于 laravel 中的集合转换为数组不起作用 @Jearson 你在转换什么?您的问题与转换无关

以上是关于获取数组内的数组总和的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中获取相乘的数组键的总和

从数组 Laravel 中获取元素总和

React JS获取数组中数字的总和

使用数组从 Access 获取 PHP 总和

C函数使用加法和减法获取数组的所有总和

如何使用 foreach 在 Nodejs 中获取数组的总和?