繁体   English   中英

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

[英]Summing the values of specific key in multidimensional array while keeping structure

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

该数组包含具有特定类型财务数据的数据['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",
    ],
  ],
];


我试图弄清楚如何为每个数据['tag']值求和每个“值”,例如,如果计算上面的数组,我希望获得的最终结果是:

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

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

任何帮助将不胜感激。

这段代码应该这样做:

$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);

我希望它会对你有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM