Vaibhav Sidapara
Vaibhav Sidapara

Reputation: 159

Sum of Dynamic Multi-Dimension array in PHP

I searched for few in-built methods and tried few logics from here and there but none can make me satisfied. I have created my own logic but is limited to a certain dimension of the array. I have managed to solve my problem for the project but as I said I am not satisfied.

Consider the array below:

 
$data = array
 (
    '0' => array
        (
            '0' => array
                (
                    'make_ready' => '',
                    'ready_time' => '0.55',
                    'rate' => '46',
                    'no_of_run' => '',
                    'fixed_cost' => '',
                    'variable_cost' => '25.3',
                    '0' => array(
                            'kg' => 2.66,
                            'rate' => 11.4,
                            'fixed_cost' => '',
                            'variable_cost' => 30.32,
                            '0' => array(
                                    'kg' => 2.66,
                                    'rate' => 11.4,
                                    'fixed_cost' => '',
                                    'variable_cost' => 30.32,
                                   ),
                        ),
                ),

        ),

    '1' => array
        (
            '0' => array
                (
                    'make_ready' => '1',
                    'ready_time' => '1.16',
                    'rate' => '36.47',
                    'no_of_run' => '',
                    'fixed_cost' => '36.47',
                    'variable_cost' => '42.31',
                ),

        ),

    '2' => array
        (
            'make_ready' => '2',
            'ready_time' => '0.29',
            'rate' => '360',
            'no_of_run' => '',
            'fixed_cost' => '720',
            'variable_cost' => '104.4',
        ),

    'size' => '1000 X 1200 X 1190',
    'up' => '3 X 4 / 17',
    'unit' => '4',
    'rate' => 16.32,
    'fixed_cost' => '',
    'variable_cost' => 65.28,
);
 

Problem:

I want to sum up all the values of array element where key is 'variable_cost', no matter how deep (in terms of dimension) is the array. Basically like a loop that can scan all the elements and do 'sum' if key matches.

I would like someone to help/suggest any logic where the calculations can be done till nth dimension.

For example like the movie Inception, in which they can go

dream->with in a dream->to nth number of dream.

and come out with the sum of 'variable_cost'. Hope you guys can understand the question here.

Thank you.

Upvotes: 1

Views: 81

Answers (1)

Clay
Clay

Reputation: 4760

You will need to use a recursive function to sum all the variable_cost values:

function sum_variable_cost( $data, $total=0)  {
    foreach ($data as $key => $item) {
        if (is_array($item)) {
            $total = sum_variable_cost($item, $total);
        } else if ($key=='variable_cost') {
            //echo $key . " " . $item . "\n";
            $total += $item;
        }
    }
    return $total;
}

echo sum_variable_cost( $data );

Basically it loops through the array and sees if there are other arrays and only adds values that contain the key variable_cost.

If you uncomment the echo line it will show this output:

variable_cost 25.3
variable_cost 30.32
variable_cost 30.32
variable_cost 42.31
variable_cost 104.4
variable_cost 65.28
297.93

Upvotes: 1

Related Questions