在保持结构的同时求和多维数组中特定键的值

时间:2019-04-23 23:54:05

标签: php

我有一个多维数组,我试图在保持数组结构的同时对值求和。

该数组包含具有特定类型财务数据的data ['tags']的“财务”数组。每个“财务”的键在整个数组中都是相同的,例如,每个“财务”将具有“收入”和“费用”。

公司在整个数组中也是相同的,但需要在最终数组中返回

这是我正在使用的数据数组的确切格式:

$array = 
[
  [
    "financials" => [
      [
        "data" => [
          "tag" => "revenue",
        ],
        "value" => 1,
      ],
      [
        "data" => [
          "tag" => "expenses",
        ],
        "value" => 10,
      ],
    ],
    "company" => [
      "id" => 1,
      "name" => "company, inc",
    ],
  ],
  [
    "financials" => [
      [
        "data" => [
          "tag" => "revenue",
        ],
        "value" => 2,
      ],
      [
        "data" => [
          "tag" => "expenses",
        ],
        "value" => 20,
      ],
    ],
    "company" => [
      "id" => 1,
        "name" => "company, inc",
    ],
  ],
];


我试图弄清楚如何对每个data ['tag']值的每个“值”求和,例如,如果计算上述数组,我想要得到的最终结果是:

[
  "financials" => [
    [
      "data" => [
        "tag" => "revenue",
      ],
      "value" => 3,
    ],
    [
      "data" => [
        "tag" => "expenses",
    ],
      "value" => 30,
    ],
  ],
  "company" => [
    "id" => 1,
    "name" => "company, inc",
  ],
],

保留原始数组结构,但已为每个data ['tag']值汇总了财务值。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

此代码应执行以下操作:

$array = [
    [
        "financials" => [
            [
                "data" => [
                    "tag" => "revenue",
                ],
                "value" => 1,
            ],
            [
                "data" => [
                    "tag" => "expenses",
                ],
                "value" => 10,
            ],
        ],
        "company" => [
            "id" => 1,
            "name" => "company, inc",
        ],
    ],
    [
        "company" => [
            "id" => 1,
            "name" => "company, inc",
        ],
        "financials" => [
            [
                "data" => [
                    "tag" => "revenue",
                ],
                "value" => 2,
            ],
            [
                "data" => [
                    "tag" => "expenses",
                ],
                "value" => 20,
            ],
        ],
    ],
];
$company = $array[0]['company'];

$summedArray = $usedTags = [];
$summedArray['company'] = $company;
$summedArray['financials'] = [];
foreach ($array as $set) {
    $data = $set['financials'];
    foreach ($data as $dataSet) {
        if (in_array($dataSet['data']['tag'], $usedTags) === false) {
            $summedArray['financials'][] = [
                "data" => [
                    "tag" => $dataSet['data']['tag']
                ],
                "value" => $dataSet['value']
            ];
            $usedTags[] = $dataSet['data']['tag'];
        } else {
            $summedArray['financials'][array_search($dataSet['data']['tag'], $usedTags)]['value'] += $dataSet['value'];
        }
    }
}

var_dump($summedArray);

希望对您有帮助