【问题标题】:Get sum of arrays inside array获取数组内的数组总和
【发布时间】:2023-03-31 16:24:02
【问题描述】:

我如何得到这个数组的 sum

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

输出应该是:

$arrays = [0, 4136500];

任何帮助将不胜感激。

【问题讨论】:

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

标签: php laravel


【解决方案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 你在转换什么?您的问题与转换无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
相关资源
最近更新 更多