将关联 3d 数组展平为关联 2d 数组并对列值求和

问题描述 投票:0回答:1

作为一个例子,我有一个像这样的数组:

$Batches = array(
    $Batch_1= array(
        $A_Row= array(1,1,0,0),
        $B_Row = array(0,0,0,1),
        $C_Row = array(0,0,0,1)
    ),
    $Batch_2= array(
        $A_Row= array(1,0,0,0),
        $B_Row = array(0,0,0,1),
        $C_Row = array(0,0,0,1)
    )
);

我想对每个 $n_Row 求和:

所以我应该得到这样的结果:

$Sum_Array = array(
     $A_row=array(2,1,0,0),
     $B_row= array(0,0,0,2),
     $C_row = array(0,0,0,2)
);

但是我很难得到这个结果,需要其他人的一些提示/建议。 这是我到目前为止的代码:

//count rows and columns
$count_array= count($Batches);
$count_row = count($Batches[0]);
$count_column = count($Batches[0][0]);

$Array_sum = array();
for($array=0;$array<$count_array;$array++){
    for($row=0;$row<$count_row;$row++){
        for($col=0;$col<$count_column;$col++){
            //echo $Batches[$array][$row][$col] . "\n";
            if($Batches[$array][$row][$col]==1){
                $Batches[$array][$row][$col]++;
            }
            $Array_sum[]=$Batches[$array][$row][$col];
        }
    }
}

有人可以帮助我朝正确的方向前进吗? 预先感谢。

php multidimensional-array sum
1个回答
1
投票

我认为你的“阵列”

$Batches = array(
    $Batch_1= array(
        $A_Row= array(1,1,0,0),
        $B_Row = array(0,0,0,1),
        $C_Row = array(0,0,0,1)),
    $Batch_2= array(
        $A_Row= array(1,0,0,0),
        $B_Row = array(0,0,0,1),
        $C_Row = array(0,0,0,1))
);

是想象力的产物。但它也是有效的 PHP 代码。我假设您想使用键,并且数组如下所示:

$Batches = array(
    'Batch_1' => array(
        'A_Row' => array(1,1,0,0),
        'B_Row' => array(0,0,0,1),
        'C_Row' => array(0,0,0,1)),
    'Batch_2' => array(
        'A_Row' => array(1,0,0,0),
        'B_Row' => array(0,0,0,1),
        'C_Row' => array(0,0,0,1))
);

求和与 foreach 配合使用效果更好。

$sum_arr = [];
foreach($Batches as $ib => $batch){
  foreach($batch as $ir => $row){
    foreach($row as $ic => $col){
      $sum_arr[$ir][$ic] ??= 0;
      $sum_arr[$ir][$ic] += $col;   
    }
  }
}

var_export($sum_arr);

输出:

array (
  'A_Row' => 
  array (
    0 => 2,
    1 => 1,
    2 => 0,
    3 => 0,
  ),
  'B_Row' => 
  array (
    0 => 0,
    1 => 0,
    2 => 0,
    3 => 2,
  ),
  'C_Row' => 
  array (
    0 => 0,
    1 => 0,
    2 => 0,
    3 => 2,
  ),
) 

求和也适用于原始数组。然而,这个数组只有数字键。

© www.soinside.com 2019 - 2024. All rights reserved.