PHP数组和值
我有一个数组:PHP数组和值,php,arrays,Php,Arrays,我有一个数组: array( [1] => Array ( [1111] => Array ( [one] => 70 [two] => 7.0 ) ) [2] => Array ( [1111] => Array ( [one] =&
array(
[1] => Array
(
[1111] => Array
(
[one] => 70
[two] => 7.0
)
)
[2] => Array
(
[1111] => Array
(
[one] => 10
[two] => 2.0
)
)
)
我希望它对两个不同数组的[1]和[2]求和,并输出如下数组:
Array
(
[1111] => Array (
[one] => 80
[two] => 9.0
)
)
Array
(
[1111] => Array (
[one] => 70
[two] => 7.0
)
)
基于密钥1111
我试过以下几种方法
$array = array_values( $array );
$sum_array = [];
foreach ( $array as $k => $sub_array ) {
foreach ( $sub_array as $id => $value ) {
$sum_array[$id] += array_key_exists( $id, $sum_array ) ? $sum_array[$id] += $value : $sum_array[$id] = $value;
$sum_array[$id]['two'] += array_sum( $sum_array[$id]['two'] ) / ( 100 * count( $sum_array[$id]['count'] ) );
}
}
但这只给了我这样的第一个值:
Array
(
[1111] => Array (
[one] => 80
[two] => 9.0
)
)
Array
(
[1111] => Array (
[one] => 70
[two] => 7.0
)
)
谁能告诉我我做错了什么吗?您可以使用将数组缩减为一个元素
array_reduce函数采用两个或三个参数。第一个是数组,第二个是回调,包含两个参数:收集器和当前项。如果array_reduce函数有第三个参数,它将用于初始化收集器,就像我们的例子一样
函数将解析每个项并对其进行处理,收集器将在每次迭代时可用,这就是为什么我们使用它来保存数据信息,在我们的例子中,它是值的总和。迭代完所有项后,函数返回收集器
<?php
$array = [
[
'1111' => [
'one' => 70,
'two' => 7.0
]
],
[
'1111' => [
'one' => 10,
'two' => 2.0
]
]
];
$output = array_reduce($array, function($collector, $item) {
$collector['1111']['one'] += $item['1111']['one'];
$collector['1111']['two'] += $item['1111']['two'];
return $collector;
}, ['1111' => ['one' => 0, 'two' => 0]]);
var_dump($output);
或差分键
$one = array_sum(array_column($array, 'one'));
$two = array_sum(array_column($array, 'two'));
$resultArray = compact('one','two');
```
下面是一种使用递归合并的方法。在下面的合并中,John的小时数成为一个数组。然后我们需要求和。由于詹姆斯只有一个条目,他的时间不会变成数组,所以我们将其保留 希望过渡合并输出能让您了解该过程:
<?php
$items =
[
[
'john' => [
'hours' => 2,
'tips' => 7
]
],
[
'john' => [
'hours' => 3,
'tips' => 10
]
],
[
'james' => [
'hours' => 8,
'tips' => 0
]
]
];
$output = array_merge_recursive(...$items);
var_export($output);
array_walk($output, function(&$v) {
array_walk($v, function(&$v) {
if(is_array($v))
$v = array_sum($v);
});
});
echo "\nResult: \n";
var_export($output);
由于这些数组的嵌套,此代码将导致$total、$one和$two为0。另外,数组映射中的$total需要一个引用。在array_map示例中,似乎您正在尝试合计所有值。