2011-03-29 10 views
0

I는 (A는 string이다 배열의 모든 값)을 데이터 배열을 가지고 여기서 데이터 입력 (http://pastebin.com/H8wv9aJU)배열 요소를 2 dim 배열로 결합 하시겠습니까?

$A = Array 
    0=>(
     [0] => "03"//main 
     [1] => "04"//sub 
     [2] => "05" 
     [3] => "07" 

    [4] => "03" //main 
    [5] => "04"//sub 
     [6] => "05" 
     [7] => "06" 
     [8] => "07" 
    [9] => "04"//sub 
     [10] => "05" 
     [11] => "06" 
     [12] => "07" 
    [13] => "04"//sub 
     [14] => "05" 
     [15] => "07" 

    [16] => "03" //main 
    [17] => "04"//sub 
     [18] => "05" 
     [19] => "06" 
     [20] => "07" 
    [21] => "04"//sub 
     [22] => "05" 
     [23] => "06" 
     [24] => "07" 
    [25] => "04"//sub 
     [26] => "05" 
     [27] => "07" 
); 

예상 결과 (04과 07 사이의 어떤 요소들이 누락 될 수있다)이다 :

Array 
(
[0] => Array // "03" 
    (
    [0] => "030405 07" //because missing 06 see here 2 space 
    ) 

[1] => Array // "03" 
    (
    [0] => "0304050607" //concatenate it all together 
    [1] => "0304050607"//concatenate it all together 
    [2] => "030405 07"//because missing 06see here 2 space 
    ) 

[2] => Array // "03" 
    (
    [0] => "0304050607" //concatenate it all together 
    [1] => "0304050607" //concatenate it all together 
    [2] => "030405 07"//because missing 06, see here 2 space 
    ) 

) 

나는 시도하고있다 :

$r = -1; 
$organized_array = array();//array expected result. 
foreach($A as $key=>$rec) { 
    if(substr($rec,0,2) == "03") { 
     // CHANGE 1 
     $save = $rec;// saved "03" yo put in child too. 
     ++$r;//inc parent => $r became 0 
     $j = 0; // child 
     $organized_array[$r][$j] = str_replace(array("\r", "\n"), "",$rec); 
     } 
     else { 
      //I STUCKED HERE FOR GETTING THE EXPECTED RESULT 
     if (($j % 3) > 0) $rec = str_replace(array("\r", "\n"), "",$rec); 
     // CHANGE 2 
     else if ($j && $j % 3 == 0) $rec = str_replace(array("\r", "\n"), "",$save.$rec); 
     $organized_array[$r][floor($j/3)] .= str_replace(array("\r", "\n"), "", $rec); 
     ++$j;//increment child 
    } 
} 

내가 무슨 일 했나 사람 수 있을까요? 나는이 문제에 대한 솔루션입니다 생각

+1

죄송합니다. 귀하가 제공 한 두 데이터 세트는별로 도움이되지 않습니다. (같은 숫자가 많아서 어디로 가는지 알기가 어렵습니다.) 또 다른 예를 들려 줄 수 있습니까? 숫자의 다른쪽에는 더하기 기호가 표시되지 않습니까? $ k ++가 아니라 ++ k. k. – Ben

+0

어쩌면 더 명확하게 편집했습니다. 감사합니다. – kn3l

+0

이고 값은 03,04,05,06 및 07 일 수 있습니다. – Ben

답변

1

...

이 같은이

$A = array("03", "04", "05", "07", "03", "04", "05", "06", "07", "04", "05", 
"06", "07", "04", "05", "07", "03", "04", "05", "06", "07", "04", "05", "06", 
"07", "04", "05", "07"); 

같은 배열 ... 예상 출력이있는 경우 :

array(3) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(10) "030405 07" 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(10) "0304050607" 
    [1]=> 
    string(10) "0304050607" 
    [2]=> 
    string(10) "030405 07" 
    } 
    [2]=> 
    array(3) { 
    [0]=> 
    string(10) "0304050607" 
    [1]=> 
    string(10) "0304050607" 
    [2]=> 
    string(10) "030405 07" 
    } 
} 

시도 이 코드!

$r = -1; $r2 = 0; $last_rec = 2; 
$organized_array = array(); 
foreach ($A as $key => $rec) { 
    if ($rec == "03") { 
    // parent 
    if ($r >= 0) $organized_array[$r][$r2] = str_pad($organized_array[$r][$r2], 10, ' '); 
    $r++; 
    $r2 = 0; 
    $organized_array[$r][$r2] = "03"; 
    } 
    else { 
    // children 
    $this_rec = $rec * 1; 
    if ($this_rec < $last_rec) { 
     $organized_array[$r][$r2] = str_pad($organized_array[$r][$r2], 10, ' '); 
     $r2++; 
     $organized_array[$r][$r2] = "03"; 
     } 
    if ($this_rec > ($last_rec + 1)) { 
     $ec = $this_rec - $last_rec - 1; 
     $organized_array[$r][$r2] .= str_repeat(" ", $ec); 
     } 
    $organized_array[$r][$r2] .= $rec; 
    } 
    $last_rec = $rec * 1; 
    } 

var_dump($organized_array); 

희망 하시겠습니까?

관련 문제