2016-05-29 3 views
0

Я использую foreach внутри функции, но я не смог вывести из нее правильное значение.foreach внутри функции не выводит значение

У меня есть массив, который будет обрабатываться функцией

//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 
       ) 

     ) 

А вот функция, которая собирает сумму ctr_tot ключа

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; 
} 

и здесь я вызываю функцию

kontratat_tot("grup_1"); 

Я искал последние 3 часа, чтобы найти решение для моей проблемы но я застрял, и даже если решение находится из моих глаз, я не мог его увидеть.

+1

'$ kontrata' внутри функции, не может получить доступ к родительской области .. вы должны определить' $ kontrata' в качестве глобальной переменной, а доступ к 'глобальный $ kontrata' внутри функции, или передать' $ kontrata', как аргумент в функции –

ответ

1

Ваша функция пытается получить доступ $kontrata, который не находится в текущей области, но и в родительской области.

Я предлагаю вам передать ваши данные в качестве аргумента, определяя глобальную переменную и доступ к ней внутри функции, ограничит использование этого же имени переменной, если вы предположите использовать эту функцию дважды или более.

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; 
} 
1

$kontrataoutside the scopekontratat_tot функция. Попробуйте указать его как global или перейти к вашей функции.

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; 
} 
+0

Большое спасибо @BenM у меня есть требование, что забыли .. –

Смежные вопросы