php二维数组求和,求助

$arr = array(
  0 => array('0' => 24505.72, '1' => 6126.43, 4 => 23),
  1 => array(0 => 3865.64, 1 => 3265.64, 32 => 23)
);

例如这是一个二维数组,求出里面每个一维数组对应相同地址的和,两个一维数组第一个数相加求和,第二个数相加求和...,如果值不是数字以0代替

clipboard.png
是这个意思,每个对应地址求和,如果不是数字或者为空以0代替

阅读 5.9k
3 个回答
$arr = array(
    0 => array('0' => 24505.72, '1' => 6126.43, 4 => 23),
    1 => array(0 => 3865.64, 1 => 3265.64, 32 => 23, 'hy' => 11)
);

$new_array = array();
foreach ($arr as $key => $value) {
    $val = array_values($value);
    foreach ($val as $k => $v) {
        if(! isset($new_array[$k]))
            $new_array[$k] = $v;
        else
            $new_array[$k] += $v;
    }
}
print_r($new_array);die;

不知道这个是不是你期望的结果

以样例而言:如果你的要求是要求出:$arr0+$arr1 , $arr0+$arr1 ,$arr0 ,$arr1 要求数组里下标一样的值累加,那么实际应该先把整个二维数组重新反向索引一下:

$arr_sum=array(); $arr_idx=array();
foreach($arr as $arr_1D){
    foreach($arr_1D as $k=>$v){
        $key='i_'.trim($k); //用来索引原键值,不建议直接用数字值
        $val=is_numeric($v)?$v:($v*1);
        if(!isset($arr_sum[$key])){ 
            $arr_sum[$key]=$val;
            $arr_idx[$key]=array($v);
        }else{
            $arr_sum[$key]+=$val;
            $arr_idx[$key][]=$v;
        }
    }
}

print_r($arr_sum); //输出的是原$arr各个键对应的数字和
print_r($arr_idx); //输出的是原$arr各个键对应的数组元素
$arr = array(
    array('0' => 24505.72, '1' => 6126.43, 4 => 23),
    array(0    => 3865.64,  1 => 3265.64, 32 => 23, 'hy' => 11)
);

$arr = array_map(function ($row) {
    return array_values($row);
}, $arr);

$result = array_map(function (...$rows) {
    foreach ($rows as $key => $val) {
        if (is_numeric($val) === false) {
            unset($rows[$key]);
        } else {
            $rows[$key] = floatval($val);
        }
    }
    
    return round(array_sum($rows), 2);
}, ...$arr);

print_r($result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题