为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
www说 2021-04-28 14:16:17
我有一个多维数组,我试图在保持数组结构的同时对值求和。该数组包含带有特定类型财务数据的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 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

此代码应执行以下操作:


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

希望对您有帮助


查看完整回答
反对 回复 2021-05-14
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信