2012-06-03 2 views
-3

나는 이미이 것을 알아내는 데 약간의 시간을했지만 쓸만한 결과는 없었다.재귀 배열

: 어쩌면 누군가가이 일 좀 도와 수, 나는 내가이 배열이 배열을

를 다시 입력으로 배열 및 출력 등의 방법을 구축하는 클래스 내에 그것을 그렇게 내가 원하는 사용하려면

 Array 
    (
     [0] => Array 
      (
       [5] => 0-5 
       [8] => 0-8 
       [9] => 0-9 
       [10] => 0-10 
      ) 

     [10] => Array 
      (
       [11] => 10-11 
       [12] => 10-12 
      ) 

     [11] => Array 
      (
       [13] => 11-13 
      ) 

     [12] => Array 
      (
       [14] => 12-14 
      ) 

    ) 

그리고이 배열이 하나로 변환해야합니다

 Array 
    (
     [0] => 0-5 
     [1] => 0-8 
     [2] => 0-9 
     [3] => Array 
      (
       [0] => 0-10 
       [1] => Array 
        (
         [0] => 10-11 
         [1] => Array 
          (
           [0] => 11-13 
          ) 

         [2] => 10-12 
         [3] => Array 
          (
           [0] => 12-14 
          ) 

        ) 

      ) 

    ) 

EDIT1 : 예제의 값도 배열 욕실이 함께있는 내가 몇 가지 작업을 처리 할. 예를 들어, 0-9는 하나의 동작이고 멈추지 만 0-10에는 자식이 있습니다. 0-10이 완료되고 true 또는 false를 반환하면 다음 자식이 시작됩니다. true이면 10-11 else 10-12. 이 포럼에서 처음으로 불편을 끼쳐 드려 죄송합니다.

EDIT2 :이 예제가 JSON에 게시 된 문자열 일 수 있습니다. 나는 직업에 적합한 기사를 고르는 데 도움이 될 몇 가지 규칙을 데이터베이스에 가지고있다.

$postdata = '{"next":false, 
        "data":{"name":"patrick", 
          "etc":"etc", 
         "MotionDetection":"yes", 
         "nameOfTheRoom": ["Room1","Room2","Room3"], 
         "havePets":"yes"}'; 

Array 
(
    [0] => 0-5 
    [1] => 0-8 
    [2] => 0-9 
    [3] => Array 
     (
      [0] => "yes" // MotionDetection 
      [1] => Array 
       (
        [0] => "yes" // Have Pets 
        [1] => Array 
         (
          [0] => "CountRecords" // Count nameOfTheRoom 
          [1] => "insertArticle A" 
         ) 

        [2] => "No" // Have Pets 
        [3] => Array 
         (
          [0] => "CountRecords" // Count nameOfTheRoom 
          [1] => "insertArticle B" 
         ) 

       ) 

     ) 

) 
+2

에 오신 것을 환영합니다! [무엇을 시도 했습니까?] (http://whathaveyoutried.com) –

+2

그리고 실제로 귀하의 질문은 무엇입니까? – lanzz

+1

이 배열을 변환하는 논리는 무엇입니까? –

답변

0

이 시도 :

function transform_arr(&$newarr, &$arr) 
{ 
    if(count($newarr) == 0) 
    { 
    if(!isset($arr[0])) 
    { 
     return; 
    } 

    $newarr = $arr[0]; 
    } 

    $newarr2 = array(); 
    $k = 0; 
    foreach($newarr as $i => $value) 
    { 
    if(isset($arr[$i])) 
    { 
     $newarr2[$k++] = $value; 
     $newarr2[$k++] = $arr[$i]; 

     if(is_array($newarr2[$k - 1])) transform_arr($newarr2[$k - 1], $arr); 
    } 
    else 
    { 
     $newarr2[$k++] = $value; 
    } 
    } 
    $newarr = $newarr2; 
} 

$arr = array( 
    0 => array(5=> '0-5', 8 => '0-8', 9 => '0-9', 10 => '0-10'), 
    10 => array(11 => '10-11', 12 => '10-12'), 
    11 => array(13 => '11-13'), 
    12 => array(14 => '12-14')); 

$newarr = array(); 
transform_arr($newarr, $arr); 

var_dump($arr); 
echo '<br/>'; 
var_dump($newarr); 

결과 : 스택 오버플로

 
    [0]=> 
    array(4) { 
    [5]=> 
    string(3) "0-5" 
    [8]=> 
    string(3) "0-8" 
    [9]=> 
    string(3) "0-9" 
    [10]=> 
    string(4) "0-10" 
    } 
    [10]=> 
    array(2) { 
    [11]=> 
    string(5) "10-11" 
    [12]=> 
    string(5) "10-12" 
    } 
    [11]=> 
    array(1) { 
    [13]=> 
    string(5) "11-13" 
    } 
    [12]=> 
    array(1) { 
    [14]=> 
    string(5) "12-14" 
    } 
} 

array(5) { 
    [0]=> 
    string(3) "0-5" 
    [1]=> 
    string(3) "0-8" 
    [2]=> 
    string(3) "0-9" 
    [3]=> 
    string(4) "0-10" 
    [4]=> 
    array(4) { 
    [0]=> 
    string(5) "10-11" 
    [1]=> 
    array(1) { 
     [0]=> 
     string(5) "11-13" 
    } 
    [2]=> 
    string(5) "10-12" 
    [3]=> 
    array(1) { 
     [0]=> 
     string(5) "12-14" 
    } 
    } 
} 
+0

거의 필요한 것입니다. 당신의 코드는 필자의 예제보다 다른 결과를 낳는다. Tnx 당신의 문제에 대한 많은! –

+0

배열 생성 논리를 완전히 설명하면 솔루션을 수정하려고합니다. – Ruben

+0

그것의 반응 체인처럼, 어쩌면 전체 아이디어가 잘못 됐습니까 ??? Pseudocode에서 motiondetection == true이면 객실 수를 계산하고 애완 동물이 있는지 물어보십시오. 그렇다면 acticle A * 방을 추가하는 것보다, 그렇지 않으면 Article B * 방을 추가하십시오. –