Reputation: 766
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
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
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