对多维PHP数组进行分组并为每个数组元素计算特定键的总和

内尔坎特·考希克(Neelkanth Kaushik)

我有一个数组,其中包含有关所有项目的数据。

我需要按'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);

但是我正在努力计算最近两天的其他字段。

对我来说唯一有用的列如下:

[project_capacity]和[year_actual]

内部“ companies”子数组

[company_type]和[capacity_share]

基本上,我想按“ year_actual”(已经完成)对数组进行分组,然后找到每年的“ project_capacity”总数,以及每年的每个“ company_type”的“ capacity_share”总数。我希望这是有道理的。

如果我们在[companies]子数组中使用[project_year]列来实现所需的输出,则没有问题。

我知道我必须在Companies子数组中进行另一个小组的工作,而我仍在尝试这样做。

我现在不关心代码效率或优化。我只是在寻找一种可行的逻辑。

我正在寻求帮助。请帮我解决一下这个。

谢谢。

罗曼·佩列赫雷斯特(RomanPerekhrest)

为了获得所需的结果,请使用以下方法扩展您的初始解决方案(array_map+ array_sum+ array_column):

$sumData = array_map(function ($v) {
    $arr = ['year' => current(array_column($v, 'year_actual'))];
    $arr['project_capacity_sum'] = array_sum(array_column($v, "project_capacity"));
    $arr['C2_capacity_sum'] = $arr['C1_capacity_sum'] = 0;

    foreach ($v as $item) {  // iterating through the nested items
        $c_capacities = array_column($item['companies'], 'capacity_share', 'company_type');
        $arr['C1_capacity_sum'] += $c_capacities['C1'];
        $arr['C2_capacity_sum'] += $c_capacities['C2'];
    }

    return $arr;
}, $projects_grouped_by_year);

print_r($sumData);

输出:

Array
(
    [2016] => Array
        (
            [year] => 2016
            [project_capacity_sum] => 300
            [C1_capacity_sum] => 28
            [C2_capacity_sum] => 29
        )

    [2014] => Array
        (
            [year] => 2014
            [project_capacity_sum] => 700
            [C1_capacity_sum] => 30
            [C2_capacity_sum] => 33
        )
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展代码:对多维PHP数组进行分组并为每个数组元素计算特定键的总和

来自分类Dev

扩展代码:对多维PHP数组进行分组并为每个数组元素计算特定键的总和

来自分类Dev

PHP:基于多个键对多维数组对象进行分组

来自分类Dev

如何计算数组中的每个元素并为每个项目创建键/值对象?

来自分类Dev

查找特定多维数组php的总和

来自分类Dev

在PHP中对多维数组进行分组

来自分类Dev

在PHP中对多维数组进行分组

来自分类Dev

MongoDB计算每个数组元素的文档

来自分类Dev

在PHP中使用相同的键获取两个或多个多维数组的元素的总和

来自分类Dev

在PHP中更改多维数组的特定键

来自分类Dev

Ruby:如何为调用的数组中的每个子数组元素添加特定键并为其分配特定值?

来自分类Dev

多维数组中元素的总和

来自分类Dev

变换数组,用父键设置每个数组元素php

来自分类Dev

PHP-通过基于值索引对键进行分组来复制多维数组

来自分类Dev

使用多维数组重复对php数组进行分组和计数

来自分类Dev

如何按更多键对多维数组进行分组

来自分类Dev

如何遍历多维数组并为每个数组添加一个值?

来自分类Dev

如何对多维数组进行分组

来自分类Dev

在mongoDB中使用数组项对查询进行分组以计算总和

来自分类Dev

检查多维数组中是否存在特定的数组键-PHP

来自分类Dev

推入多维数组的每个元素

来自分类Dev

在php中对数组元素进行分组

来自分类Dev

遍历php多维数组的每个键和值

来自分类Dev

如何使用php在多维数组中按键对项目进行分组

来自分类Dev

对多维数组中数组键的元素求和

来自分类Dev

根据子数组值对PHP多维数组进行排序,然后对主数组键进行排序

来自分类Dev

在键上对PHP不同格式的多维数组进行排序

来自分类Dev

在PHP中使用日期作为键对多维数组进行排序

来自分类Dev

通过另一个数组中的键对多维数组进行排序

Related 相关文章

  1. 1

    扩展代码:对多维PHP数组进行分组并为每个数组元素计算特定键的总和

  2. 2

    扩展代码:对多维PHP数组进行分组并为每个数组元素计算特定键的总和

  3. 3

    PHP:基于多个键对多维数组对象进行分组

  4. 4

    如何计算数组中的每个元素并为每个项目创建键/值对象?

  5. 5

    查找特定多维数组php的总和

  6. 6

    在PHP中对多维数组进行分组

  7. 7

    在PHP中对多维数组进行分组

  8. 8

    MongoDB计算每个数组元素的文档

  9. 9

    在PHP中使用相同的键获取两个或多个多维数组的元素的总和

  10. 10

    在PHP中更改多维数组的特定键

  11. 11

    Ruby:如何为调用的数组中的每个子数组元素添加特定键并为其分配特定值?

  12. 12

    多维数组中元素的总和

  13. 13

    变换数组,用父键设置每个数组元素php

  14. 14

    PHP-通过基于值索引对键进行分组来复制多维数组

  15. 15

    使用多维数组重复对php数组进行分组和计数

  16. 16

    如何按更多键对多维数组进行分组

  17. 17

    如何遍历多维数组并为每个数组添加一个值?

  18. 18

    如何对多维数组进行分组

  19. 19

    在mongoDB中使用数组项对查询进行分组以计算总和

  20. 20

    检查多维数组中是否存在特定的数组键-PHP

  21. 21

    推入多维数组的每个元素

  22. 22

    在php中对数组元素进行分组

  23. 23

    遍历php多维数组的每个键和值

  24. 24

    如何使用php在多维数组中按键对项目进行分组

  25. 25

    对多维数组中数组键的元素求和

  26. 26

    根据子数组值对PHP多维数组进行排序,然后对主数组键进行排序

  27. 27

    在键上对PHP不同格式的多维数组进行排序

  28. 28

    在PHP中使用日期作为键对多维数组进行排序

  29. 29

    通过另一个数组中的键对多维数组进行排序

热门标签

归档