2016-05-29 26 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'全球var和內部功能訪問'全局變量$ 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

$kontrata是您的kontratat_tot函數的outside the scope。嘗試將其指定爲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我有complity忘記了.. –