2017-02-15 76 views
0

我有一個多維數組,可以是N級深度。我想操作最後一個數組(在下面的例子中是2級),我們知道它是遞歸函數中的最後一個數組,當它找到關鍵字'a'時。PHP編輯深度未知的多維數組

我想一個新的密鑰添加到這個陣列說「C」和「c」的值將用「A」和「B」

的值來計算,我可以寫一個遞歸函數循環數組沒有問題,但不知道如何返回一個新的密鑰'c'和數據到最後一個數組。

Array 
    (
    [level1] => Array 
     (
      [level2_a] => Array 
       (
        [a] => 786578 
        [b] => 34450 
       ), 

      [level2_b] => Array 
       (
        [a] => 786578 
        [b] => 34450 
       ) 


     ) 

    ) 

我試過以下,但不能得到它返回新的數據,它只是返回原始數組。

function calculateAverages(&$arr,$key) { 

    if (is_array($arr)) {  
     if (in_array('a',array_keys($arr))) { 
      //add new data to this array  
     }else { 
     foreach($arr as $key => $data) { 
      calculateAverages($data,$key); 
     } 
     } 
    } 
    } 
+0

您可以使用''的foreach結束()'函數()' –

回答

2

您即將實現您的目標只有您必須做的更改是將引用傳遞給foreach循環。在這裏沒有關鍵的要求,所以我刪除它。試試這個:

$arr =Array 
    (
    'level1' => Array 
     (
      'level2_a' => Array 
       (
        'a' => 786578, 
        'b' => 34450, 
       ), 

      'level2_b' => Array 
       (
        'a' => 786578, 
        'b' => 34450, 
       ) 


     ) 

    ); 

    function calculateAverages(&$arr) { 
     if (is_array($arr)) { 

      if (in_array('a',array_keys($arr))) { 
       $avg = ((array_sum($arr))/2); 
       $arr['c']=$avg;      

      } 
      else { 
      foreach($arr as &$data) { 
       calculateAverages($data);     
      } 
      } 
     } 
    } 
calculateAverages($arr); 
print_r($arr); 

例子:https://eval.in/737280

+0

你是正確的。 +1 –