【发布时间】:2016-06-26 12:04:07
【问题描述】:
我有一个包含所有项目数据的数组。
我需要按“year_actual”元素对数组进行分组。
我已经使用 php 函数“array_group_by”成功完成了这个分组,可以在这里找到:https://gist.github.com/mcaskill/baaee44487653e1afc0d
这是我分配给变量的分组数组:$projects_grouped_by_year
Array
(
[2016] => Array
(
[0] => Array
(
[id] => 1
[project_name] => P1
[project_capacity] => 100
[year_actual] => 2016
[companies] => Array
(
[0] => Array
(
[id] => 1
[project_id] => 1
[company_type] => C1
[capacity_share] => 12
[project_year] => 2016
)
[1] => Array
(
[id] => 2
[project_id] => 1
[company_type] => C2
[capacity_share] => 14
[project_year] => 2016
)
)
)
[1] => Array
(
[id] => 2
[project_name] => P2
[project_capacity] => 200
[year_actual] => 2016
[companies] => Array
(
[0] => Array
(
[id] => 3
[project_id] => 2
[company_type] => C2
[capacity_share] => 15
[project_year] => 2016
)
[1] => Array
(
[id] => 4
[project_id] => 2
[company_type] => C1
[capacity_share] => 16
[project_year] => 2016
)
)
)
)
[2014] => Array
(
[0] => Array
(
[id] => 3
[project_name] => P3
[project_capacity] => 300
[year_actual] => 2014
[companies] => Array
(
[0] => Array
(
[id] => 5
[project_id] => 3
[company_type] => C1
[capacity_share] => 20
[project_year] => 2014
)
[1] => Array
(
[id] => 6
[project_id] => 3
[company_type] => C2
[capacity_share] => 22
[project_year] => 2014
)
)
)
[1] => Array
(
[id] => 4
[project_name] => P4
[project_capacity] => 400
[year_actual] => 2014
[companies] => Array
(
[0] => Array
(
[id] => 7
[project_id] => 4
[company_type] => C2
[capacity_share] => 11
[project_year] => 2014
)
[1] => Array
(
[id] => 8
[project_id] => 4
[company_type] => C1
[capacity_share] => 10
[project_year] => 2014
)
)
)
)
)
我正在操作上面的数组来创建一个新的以下结果数组: 我将创建一个新数组并将计算的值插入到这个新数组中:
Array
(
[0] => Array(
//year_actual of project
'year' => 2016,
//[100+200] : sum of 'project_capacity' where year_actual = 2016
'project_capacity_sum' => 300,
//[12+16] : sum of 'capacity_share' where company_type = C1 and project_year = 2016
'C1_capacity_sum' => 28,
//[14+15] : sum of 'capacity_share' where company_type = C2 and project_year = 2016
'C2_capacity_sum' => 29
)
[1] => Array(
//year_actual of project
'year' => 2014,
//[300+400] : sum of 'project_capacity' where year_actual = 2014
'project_capacity_sum' => 700,
//[20+10] : sum of 'capacity_share' where company_type = C1 and project_year = 2014
'C1_capacity_sum' => 30,
//[22+11] : sum of 'capacity_share' where company_type = C2 and project_year = 2014
'C2_capacity_sum' => 33
)
);
我已成功使用以下代码计算字段“project_capacity_sum”:
$projectCapacitySum = array_map(function($data) {
return array_sum(array_column($data, 'project_capacity'));
}, $projects_grouped_by_year);
但是最近两天我正在努力计算其他字段。
对我来说唯一有用的专栏如下:
[项目容量] 和 [year_actual]
在“公司”子数组中
[公司类型] 和 [容量共享]
基本上我正在尝试按“year_actual”对数组进行分组(我已经这样做了) 然后找到每年的总“project_capacity”以及每年每个“company_type”的总“capacity_share”。我希望这是有道理的。
如果我们使用 [companies] 子数组中的 [project_year] 列来实现所需的输出,则没有问题。
我知道我必须在公司子数组中进行另一个分组。我仍在尝试这样做。
此时我并不关心代码效率或优化。我只是在寻找一个可行的逻辑。
我正在寻求帮助。请帮我解决这个问题。
谢谢。
【问题讨论】:
-
你是如何使用其他列的?给我们一个实际上不起作用的代码示例,我们自己很难弄清楚。
-
对我来说唯一有用的列如下:对于每年内部的每个项目:[project_capacity] 和 [year_actual] 在“companies”子数组中:[company_type] 和 [capacity_share] 基本上我正在尝试组按“year_actual”排列的数组(我已经完成了)然后找到每年的总“project_capacity”以及每年每个“company_type”的总“capacity_share”。我希望这是有道理的。
-
如果我们使用 [companies] 子数组中的 [project_year] 列来实现所需的输出,是没有问题的。
-
现在又想到了一个问题,您如何处理这些公司类型和共享容量?请记住,您在一个多维数组中,并且必须执行第二个“映射”才能处理它。
array.map(function(data){ ... $returnvalue = array.map($secondArrayData) {...}, $data.companies ...}, $projects_by_year);. -
我知道我必须在公司子数组中进行另一个分组。我仍在尝试这样做。
标签: php arrays multidimensional-array