有什么最简单的方法并且使用较少的计算能力来检查多维数组在子键中是否具有一些相等的值,如果是,则计算其总和?
查看输入。它是这样的:
$array[] = ['number' => 1, 'values' => ['a' => 1, 'b' => 2]];
$array[] = ['number' => 2, 'values' => ['a' => 4, 'b' => 1]];
$array[] = ['number' => 2, 'values' => ['a' => 1, 'b' => 4]]; // same "number" as the previous so get the sum between "a" of the previous and "a" of this, the same for "b"
$array[] = ['number' => 2, 'values' => ['a' => 1, 'b' => 1]]; // same "number" as the previous so get the sum between "a" of the previous and "a" of this, the same for "b"
$array[] = ['number' => 3, 'values' => ['a' => 2, 'b' => 4]];
所以输出应该是
$array[0] : ['number' => 1, 'values' => ['a' => 1, 'b' => 2]];
$array[1] : ['number' => 2, 'values' => ['a' => 6, 'b' => 6]]; //a = 4 + 1 + 1 //b = 1 + 4 + 1
$array[2] : ['number' => 3, 'values' => ['a' => 2, 'b' => 4]];
说实话,即使用简单的 foreach 我也很难做到这一点。
我的大脑只能思考到这个程度,不能再进一步。
$array_output = [];
foreach ($array as $k => $v){
foreach ($array as $kk => $vv){
if ($v['number'] == $vv['number']) {
// ????
}
}
}
有人能帮帮我吗?
同一问题中的另一个问题
如何做同样的事情$array[] = ['number' => 1, 'a' => 1, 'b' => 2];
$array[] = ['number' => 2, 'a' => 4, 'b' => 1];
$array[] = ['number' => 2, 'a' => 1, 'b' => 4];
$array[] = ['number' => 2, 'a' => 1, 'b' => 1];
$array[] = ['number' => 3, 'a' => 2, 'b' => 4];
number
那么如何对a
和变量计算相同变量的总和呢b
?
检查结果
给了我这个
编辑:回去看到 CH 关于错误增量放置的评论,代码现已更正。
补充一下,为了回答后续问题,您可以删除所有提及的内容,
['values']
以便对更简单的第二个数组示例使用相同的逻辑。使用数组函数。其思想是构建一个数组,其中“数字”是键
array_reduce
,然后用 删除这些键array_values
。这样,您就可以轻松知道是否已经遇到某个数字,以及是否必须求和或定义一个新键。array_values
最后用于删除这些键。演示
请注意,此代码是为 PHP >= 8.0 编写的。为了使其与旧版本兼容,请删除函数调用中的参数标签(
callback:
、key:
、array:
等)。这样,您就不需要跟踪推送到结果数组中的数据的索引,也不需要重新索引结果,将引用变量推送到结果数组中来表示每个组。
假设所有行在子数组中都有相同的列
values
,则每当遇到一个组不止一次时,就可以在嵌套循环中无条件地求和。(演示)这个建议与我之前关于对数组数据进行分组和求和的许多回答类似。我的文章标签为数组 + 分组 + 求和