mercredi 29 juin 2016

Grouping multidimensional php array by a key and add the values another key [duplicate]

Suppose I have following array:

Array
(
[2016] => Array
    (
        [C1] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [project_id] => 1
                        [company_type] => C1
                        [capacity_share] => 12
                        [project_year] => 2016
                    )

                [1] => Array
                    (
                        [id] => 4
                        [project_id] => 2
                        [company_type] => C1
                        [capacity_share] => 16
                        [project_year] => 2016
                    )

            )

        [C2] => Array
            (
                [0] => Array
                    (
                        [id] => 2
                        [project_id] => 1
                        [company_type] => C2
                        [capacity_share] => 14
                        [project_year] => 2016
                    )

                [1] => Array
                    (
                        [id] => 3
                        [project_id] => 2
                        [company_type] => C2
                        [capacity_share] => 15
                        [project_year] => 2016
                    )

            )

    )

[2014] => Array
    (
        [C1] => Array
            (
                [0] => Array
                    (
                        [id] => 5
                        [project_id] => 3
                        [company_type] => C1
                        [capacity_share] => 20
                        [project_year] => 2014
                    )

                [1] => Array
                    (
                        [id] => 8
                        [project_id] => 4
                        [company_type] => C1
                        [capacity_share] => 10
                        [project_year] => 2014
                    )

            )

        [C2] => Array
            (
                [0] => Array
                    (
                        [id] => 6
                        [project_id] => 3
                        [company_type] => C2
                        [capacity_share] => 22
                        [project_year] => 2014
                    )

                [1] => Array
                    (
                        [id] => 7
                        [project_id] => 4
                        [company_type] => C2
                        [capacity_share] => 11
                        [project_year] => 2014
                    )

            )

    )

)

Is there any way so that I can create a new array like this:

Array
(
[0] => Array(
    //project_year
    'project_year' => 2016,          

     //sum of 'capacity_share' where company_type = C1 and project_year = 2016
    'C1_capacity_sum' => 28, //[12+16]

     //sum of 'capacity_share' where company_type = C2 and project_year = 2016
    'C2_capacity_sum' => 29 //[14+15]
    )
[1] => Array(
     //project_year
    'project_year' => 2014,

     //sum of 'capacity_share' where company_type = C1 and project_year = 2014
    'C1_capacity_sum' => 30, //[20+10]

     sum of 'capacity_share' where company_type = C2 and project_year = 2014
    'C2_capacity_sum' => 33 //[22+11]
    )
);

I am very new to PHP any can't find any built-in method for this. However I have tried my hands on array_walk and array_map.

I will welcome any hint or help regarding this.

Thanks.

Aucun commentaire:

Enregistrer un commentaire