Rafael Shkembi
Rafael Shkembi

Reputation: 766

foreach inside a function doesn't output value

I am using a foreach inside a function but, I could not output the correct value from it.

I have an array to be processed by function

//this is only a small part of it because it is very large
Array
(
    [2016-05-02] => Array
        (
            [grup_1] => Array
                (
                    [luce] => 4
                    [ctr_ok] => 3
                    [ctr_tot] => 7
                    [ctr_ko] => 4
                    [gas] => 3
                    [ore] => 30.5
                )

            [grup_2] => Array
                (
                    [luce] => 3
                    [ctr_ko] => 4
                    [ctr_tot] => 6
                    [gas] => 3
                    [ctr_ok] => 2
                    [ore] => 47
                )

            [grup_3] => Array
                (
                    [luce] => 6
                    [ctr_ko] => 1
                    [ctr_tot] => 8
                    [ctr_gia_cliente] => 1
                    [ctr_ok] => 6
                    [gas] => 2
                    [ore] => 24
                )

            [grup_4] => Array
                (
                    [luce] => 4
                    [ctr_ok] => 4
                    [ctr_tot] => 8
                    [gas] => 4
                    [ctr_ko] => 4
                    [ore] => 30
                )

            [grup_5] => Array
                (
                    [luce] => 9
                    [ctr_ko] => 11
                    [ctr_tot] => 17
                    [gas] => 8
                    [ctr_ok] => 6
                    [ore] => 35
                )

            [grup_6] => Array
                (
                    [luce] => 1
                    [ctr_ok] => 2
                    [ctr_tot] => 2
                    [gas] => 1
                    [ore] => 36
                )

            [grup_7] => Array
                (
                    [luce] => 5
                    [ctr_ko] => 1
                    [ctr_tot] => 7
                    [ctr_ok] => 6
                    [gas] => 2
                    [ore] => 22
                )

        )

    [2016-05-03] => Array
        (
            [grup_1] => Array
                (
                    [luce] => 6
                    [ctr_ok] => 6
                    [ctr_tot] => 10
                    [gas] => 4
                    [ctr_ko] => 4
                    [ore] => 33.5
                )

            [grup_2] => Array
                (
                    [luce] => 6
                    [ctr_ok] => 4
                    [ctr_tot] => 8
                    [ctr_ko] => 2
                    [gas] => 2
                    [ctr_att_green] => 2
                    [ore] => 36
                )

            [grup_3] => Array
                (
                    [luce] => 6
                    [ctr_ok] => 4
                    [ctr_tot] => 9
                    [gas] => 3
                    [ctr_ko] => 5
                    [ore] => 36
                )

            [grup_4] => Array
                (
                    [luce] => 5
                    [ctr_ko] => 2
                    [ctr_tot] => 10
                    [gas] => 5
                    [ctr_ok] => 8
                    [ore] => 42
                )

            [grup_5] => Array
                (
                    [gas] => 2
                    [ctr_ok] => 3
                    [ctr_tot] => 3
                    [luce] => 1
                    [ore] => 23
                )

            [grup_6] => Array
                (
                    [luce] => 1
                    [ctr_ko] => 2
                    [ctr_tot] => 2
                    [gas] => 1
                    [ore] => 36
                )

            [grup_7] => Array
                (
                    [luce] => 2
                    [ctr_ok] => 1
                    [ctr_tot] => 3
                    [ctr_gia_cliente] => 2
                    [gas] => 1
                    [ore] => 27.3
                )

        )

And here is the function that collects the sum of ctr_tot key

function kontratat_tot($grup_name){
        $total = 0;
        foreach ($kontrata as $date => $grup){
            if($grup[$grup_name]['ctr_tot'] != 0){
                $total += $grup[$grup_name]['ctr_tot'];
            }
        }
    return $total;
}

and here I call the function

kontratat_tot("grup_1");

I have been looking for the past 3 hours to find any solution for my problem but i have stuck and even if the solution is in from of my eyes I could not see it.

Upvotes: 0

Views: 112

Answers (2)

kamal pal
kamal pal

Reputation: 4207

Your function is trying to access $kontrata which is not in current scope, but in parent scope.

I suggest you to pass your data as an argument, defining global variable and accessing it inside function will limit you to use that same variable name, if you suppose to use this function twice or more.

function kontratat_tot($kontrata, $grup_name){
        $total = 0;
        foreach ($kontrata as $date => $grup){
            if($grup[$grup_name]['ctr_tot'] != 0){
                $total += $grup[$grup_name]['ctr_tot'];
            }
        }
    return $total;
}

Upvotes: 1

BenM
BenM

Reputation: 53228

$kontrata is outside the scope of your kontratat_tot function. Try specifying it as global, or passing into your function.

function kontratat_tot($grup_name)
{
    global $kontrata;

    $total = 0;

    foreach( $kontrata as $date => $grup )
    {
        if($grup[$grup_name]['ctr_tot'] != 0)
        {
            $total += $grup[$grup_name]['ctr_tot'];
        }
    }

    return $total;
}

Upvotes: 1

Related Questions