2017-02-15 6 views
0

나는 N 레벨의 깊이가 될 수있는 다차원 배열을 가지고 있습니다. 최종 배열 (아래 예제에서 레벨 2)을 조작하고 싶습니다. 키 'a'를 찾으면 재귀 함수의 마지막 배열임을 알 수 있습니다.알 수없는 깊이의 PHP 편집 다차원 배열

는 I는 I가 재귀 함수를 작성할 수 '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

당신이 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 –