[英]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.