我有一个像
这样的数组Array
(
[A1] => Array
(
[1] => 1
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
)
[A2] => Array
(
[1] => 1
[2] => 1
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
)
[A3] => Array
(
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
)
)
我想按列添加。
我想要这样回答:
[sum] => Array
(
[1] => 2
[2] => 1
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
)
php中是否有任何数组函数可以执行此操作?否则我怎么能这样做?
答案 0 :(得分:2)
总是有自定义代码:
function array_sum_rows($arr) {
$out = array();
foreach ($arr as $row) {
foreach ($row as $i => $val) {
$out[$i] = isset($out[$i]) ? $out[$i] + $val : $val;
}
}
return $out;
}
答案 1 :(得分:0)
$multiArray = ... //your array
$sumArray = array();
$i = 1;
foreach ($multiArray as $key => $array) {
$sumArray[$i] = array_sum($array);
$i++;
}
这适用于您的阵列。你会得到一个数组
答案 2 :(得分:0)
不幸的是丢失了转置中的实际索引:
function array_transpose($arr) {
return call_user_func_array(
'array_map',
array_merge(
array(NULL),
$arr
)
);
}
$transposedArray = array_transpose($myData);
$result = array_map('array_sum', $transposedArray);
var_dump($result);
但索引可以通过
恢复$result = array_combine(array_keys(end($myData)), $result);
答案 3 :(得分:0)
“转置”输入数组(将数据旋转 90 度,使列变成行),然后将新的“行”提供给 array_map()
,以便每个都调用 array_sum()
。>
代码:(Demo)
$array = [
'A1' => [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'A2' => [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
'A3' => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];
var_export(array_map('array_sum', array_map(null, ...array_values($array))));
*在展开运算符 (array_values()
) 之前调用 ...
是必要的,直到使用不会被字符串键阻塞的 php 版本。
产生平面输出数组:[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]