2017-02-15 11 views
0

私はNレベルの深さにすることができる多次元配列を持っています。私は最終的な配列(以下の例ではレベル2)を操作したいと思います。キー 'a'を見つけると、再帰関数の最後の配列です。深さが未知のPHP編集多次元配列

は私がに再帰関数を書くことができます「a」と「b」

の値を使用して計算されます「C」と「C」の値を言い、この配列に新しいキーを追加したいです配列をループしても問題ありませんが、新しいキー '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

あなたは正しい –

答えて

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

')(foreachの' 'で終わり()'関数を使用することができます。 +1 –