处理多维数组数组并在PHP中添加值

时间:2013-11-07 15:46:40

标签: php arrays

所以到目前为止,我一直在问很多关于adding the values of all arrays in an array of arrays into one array.的问题。这很好,很花哨 - 等等。

我遇到了一个问题,我有一些东西var_dump看起来像:

array(5) {
  ["AB"]=>
  array(3) {
    ["Unknown"]=>
    array(810) {
      [0]=>
      array(7) {
        ["REG"]=>
        float(0)
        ["COST"]=>
        float(0)
        ["TOT"]=>
        float(0)
        ["OT"]=>
        float(0)
        ["TRVL"]=>
        float(0)
        ["TRV OT"]=>
        float(0)
        ["TOTAL"]=>
        float(0)
      },
      .... (809 More)
    }
    ["SomeName"]=>
    array(810) {
      [0]=>
      array(7) {
        ["REG"]=>
        float(0)
        ["COST"]=>
        float(0)
        ["TOT"]=>
        float(0)
        ["OT"]=>
        float(0)
        ["TRVL"]=>
        float(0)
        ["TRV OT"]=>
        float(0)
        ["TOTAL"]=>
        float(0)
      },
      .... (809 More)
    }
  }
["MB"]=>
array(3) {
  ["SomeName"]=>
  array(110) {
      [0]=>
      array(7) {
        ["REG"]=>
        float(0)
        ["COST"]=>
        float(0)
        ["TOT"]=>
        float(0)
        ["OT"]=>
        float(0)
        ["TRVL"]=>
        float(0)
        ["TRV OT"]=>
        float(0)
        ["TOTAL"]=>
        float(0)
      },
      .... (109 More)
    }
  }
}

注意:我试图根据回来的数据格式化阵列,这是所有真实数据减去实际的800个门票 - 他们的其他省份和更多用户。

正如您所看到的那样,每个省都是一个用户,该用户可以出现在多个省份,具有不同程度的“票证”信息。例如,在阿尔伯塔(AB),SomeName有810张票,其中MB表示同一用户有110张票。

所以我想将用户下的所有这些“数组”添加到一个数组中,因此不是拥有810个数组的Unknown,而是将所有值加起来,保持相同的键结构。

所以我写了这个:

// $array  contains the sample array above
foreach($array as $province=>$user){
    foreach($user as $userName=>$tickets){
        $result = array();
        foreach ($tickets as $ticket) {
            foreach ($ticket as $key=>$value) {
                $result[$key] = number_format($result[$key] + $value, 2);
                $array[$province][$userName][] = $result;
            }
        }
    }
}

但除非我做错了 - 我带回了Unknown而不是一个阵列的910张门票。

最终Unknown应如下所示:

    ["Unknown"]=>
    array(1) {
      [0]=>
      array(7) {
        ["REG"]=>
        float(0)
        ["COST"]=>
        float(0)
        ["TOT"]=>
        float(0)
        ["OT"]=>
        float(0)
        ["TRVL"]=>
        float(0)
        ["TRV OT"]=>
        float(0)
        ["TOTAL"]=>
        float(0)
     }
    }
    ...

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

这可以解决吗?

$all = array();
foreach($array as $province=>$user){
    foreach($user as $userName=>$tickets){
        $result = array();
        foreach ($tickets as $ticket) {
            foreach ($ticket as $key=>$value) {
                $result[$key] = number_format($result[$key] + $value, 2);

            }
        }
        $all[$province][$userName] = $result;
    }
}
echo '<pre>';
print_r($all);
echo '</pre>';