2013-07-15 5 views
0

[mykey] 키를 포함하는 배열의 내용을 다른 값으로 바꾸는 재귀 적으로 배열을 업데이트하고 싶습니다 ([foo] => bar, [bar] => foo) . 이 코드는 이미 작동했지만 이미 리팩토링하고 싶습니다.배열의 원소를 재귀 적으로 바꿉니다

Array 
(
    [objects] => Array 
     (
      [0] => Array 
       (
        [somekey] => value 
        [items] => Array 
         (
          [0] => Array 
           (
            [myKey] => item1 
           ) 

          [1] => Array 
           (
            [myKey] => item2 
           ) 
         ) 
       ) 

      [1] => Array 
       (
        [otherKey] => other value 
        [items] => Array 
         (
          [0] => Array 
           (
            [myKey] => item3 
           ) 

          [1] => Array 
           (
            [myKey] => item4 
           ) 
         ) 
       ) 

      [2] => Array 
       (
        [myKey] => item5 
       ) 
     ) 
) 

내가 최종적으로 갖고 싶은 것은 아래에있다. 사용할 키/값을 결정하는 방법을 생각하지 마십시오. 배열에 배열을 추가하는 방법을 생각하면됩니다.

Array 
(
    [objects] => Array 
     (
      [0] => Array 
       (
        [somekey] => value 
        [items] => Array 
         (
          [0] => Array 
           (
            [foo] => bar 
           ) 

          [1] => Array 
           (
            [bar] => foo 
           ) 
         ) 
       ) 

      [1] => Array 
       (
        [otherKey] => other value 
        [items] => Array 
         (
          [0] => Array 
           (
            [whatever] => value 
           ) 

          [1] => Array 
           (
            [foo1] => bar 
           ) 
         ) 
       ) 

      [2] => Array 
       (
        [bar1] => foo2 
       ) 
     ) 
) 

미리 감사드립니다.

답변

1

이 기능을 시도 할 수 있습니다 : 아이디어에 대한

function replace_recursive_array($array, $old_key, $new_key, $new_value) { 

    foreach ($array as $key => $value) { 

     if (is_array($value)) { 

      $array[$key] = replace_recursive_array($value, $old_key, $new_key, $new_value); 

     }elseif($key == $old_key) { 

      $array[$new_key] = $new_value; 

     } 

    } 

    unset($array[$old_key]);   
    return $array; 

} 
+1

감사합니다. 그것을 사용하여 약간 변경하고 내 문제를 해결합니다. – dlondero

+0

기능을 향상시킬 수 있습니다. 단지 작은 설정 일뿐입니다. ;-) – Pieter

관련 문제