2012-08-25 2 views
0

내 현재 시도 코드 예를 들어발견 된 키

[database] => Array 
     (
      [0] => Array // Would be renamed to "production" 
       (
        [host] => test 
        [user] => test 
        [pass] => test 
        [name] => test 
        [port] => test 
        [@attr] => Array 
         (
          [alias] => production 
          [name] => live 
         ) 

       ) 

      [1] => Array // Would be renamed to "development" 
       (
        [user_data] => Array 
         (
          [0] => Array // Would be renamed to "three" 
           (
            [user] => sample 
            [@attr] => Array 
             (
              [alias] => three 
             ) 

           ) 

          [1] => Array // Would be renamed to "two" 
           (
            [user] => sample 
            [@attr] => Array 
             (
              [alias] => two 
             ) 

           ) 

         ) 

        [host] => test 
        [user] => test 
        [pass] => test 
        [name] => test 
        [port] => test 
        [@attr] => Array 
         (
          [alias] => development 
         ) 

       ) 

     ) 

을이 배열을 가지고, 두 가지 수준의 발견 키 위에있는 키의 이름을 변경하는 방법 :

private function _applyXmlAlias($array) 
     { 
      foreach ($array as $config) 
      { 
       if (is_array($config)) 
       { 
        if (isset($config['@attr']['alias'])) 
        { 
         $alias = $config['@attr']['alias']; 

         unset($config['@attr']['alias']); 

         if (empty($config['@attr'])) 
         { 
          unset($config['@attr']); 
         } 

         reset($config); 

         while (list($key, $val) = each($config)) 
         { 

          $this->_config[$alias][$key] = $val; 
         } 

         //$this->_config[$alias] = $config; 

         //$this->_applyXmlAlias($this->_alias[$alias]); 

        } else { 

         $this->_applyXmlAlias($config); 
        } 

       } else { 

        break; 
       } 
      } 
     } 

나는이 배열 출력 I 다소 내 출력을 입수했습니다 당신이 볼 수 있듯이

Array 
(
    [database] => Array 
     (
      [0] => Array 
       (
        [host] => test 
        [user] => test 
        [pass] => test 
        [name] => test 
        [port] => test 
        [@attr] => Array 
         (
          [alias] => production 
          [name] => live 
         ) 

       ) 

      [1] => Array 
       (
        [user_data] => Array 
         (
          [0] => Array 
           (
            [user] => sample 
            [@attr] => Array 
             (
              [alias] => three 
             ) 

           ) 

          [1] => Array 
           (
            [user] => sample 
            [@attr] => Array 
             (
              [alias] => two 
             ) 

           ) 

         ) 

        [host] => test 
        [user] => test 
        [pass] => test 
        [name] => test 
        [port] => test 
        [@attr] => Array 
         (
          [alias] => development 
         ) 

       ) 

     ) 

    [production] => Array 
     (
      [host] => test 
      [user] => test 
      [pass] => test 
      [name] => test 
      [port] => test 
      [@attr] => Array 
       (
        [name] => live 
       ) 

     ) 

    [development] => Array 
     (
      [user_data] => Array 
       (
        [0] => Array 
         (
          [user] => sample 
          [@attr] => Array 
           (
            [alias] => three 
           ) 

         ) 

        [1] => Array 
         (
          [user] => sample 
          [@attr] => Array 
           (
            [alias] => two 
           ) 

         ) 

       ) 

      [host] => test 
      [user] => test 
      [pass] => test 
      [name] => test 
      [port] => test 
     ) 

    [three] => Array 
     (
      [user] => sample 
     ) 

    [two] => Array 
     (
      [user] => sample 
     ) 

) 

를 얻을. 유일한 문제는 새 배열을 마스터 구성 배열의 새로운 alias 이름으로 바꿔야한다는 것입니다. 또한 키가 [@attr][alias] 인 동일한 자식 배열이 동일한 부모 배열에 속하며 마스터 구성 배열에 추가되지 않도록 배열에 알려야합니다.

어떤 아이디어가 있습니까?

답변

0

필자의 문제 설명에서 알 수 있듯이 재귀 적/스택 기반 솔루션을 사용해야합니다. 그러나 그것은 복잡 할뿐만 아니라 값 비싼 것입니다. 이 작업을 수행해야하는 시나리오를 설명 할 수 있다면 더 나은 디자인이 토론에 참여할 수 있습니다.

관련 문제