0

给定下面的数组,如何创建具有匹配键的 sum 数组?

$arr = array(
           array('alpha',1,2,3,4,5),
           array('beta',1,2,3,4,5),
           array('gamma',1,2,3,4,5),
           array('delta',1,2,3,4,5)
       );

这就是我最终想要的:

array('',4,8,12,16,20);

这是最有效的方法吗?

function getArrTotals($arr) {
    $arrTotal = array();
    foreach ($arr as $subArr) {
        foreach ($subArr as $k => $v) {
            if (is_numeric($v)) {
                if (!array_key_exists($k,$arrTotal)) {
                    $arrTotal[$k] = 0;
                }
                $arrTotal[$k] = $arrTotal[$k] + $v;
            } else {
                if (!array_key_exists($k,$arrTotal)) {
                    $arrTotal[$k] = '';
                }
            }
        }
    }
    return $arrTotal;
}
4

1 回答 1

1

使用PHP 5.5的新array_column()函数:

$colCount = count($arr[0]);
$result = array();
for ($i = 0; $i < $colCount; $i++) {
    $result[] = 
        array_sum(
        array_column($arr, $i)
    );
}
var_dump($result);

或者对于早期版本的 PHP

$result = array();
foreach(call_user_func_array('array_map',array_merge(array(NULL),$arr)) as $column) {
    $result[] = array_sum($column);
}
var_dump($result);

两种方法都假定每个子数组中的条目数相同

编辑

过滤掉非数值以返回第一列的空字符串:

$colCount = count($arr[0]);
$result = array();
for ($i = 0; $i < $colCount; $i++) {
    $values = array_filter(
        array_column($arr, $i),
        'is_numeric'
    );
    $result[] = count($values) > 0 ? array_sum($values) : '';
}
var_dump($result);

$result = array();
foreach(call_user_func_array('array_map',array_merge(array(NULL),$arr)) as $column) {
    $values = array_filter($column,
        'is_numeric'
    );
    $result[] = count($values) > 0 ? array_sum($values) : '';
}
var_dump($result);

如果你想要一个空值,那么只需用空值替换''

于 2013-09-12T15:40:29.223 回答