猿问

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

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


该数组包含带有特定类型财务数据的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']值汇总了财务值。


www说
浏览 123回答 1
1回答

慕后森

此代码应执行以下操作:$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);希望对您有帮助
随时随地看视频慕课网APP
我要回答