2011-03-29 79 views
0

我有一個數據陣列(陣列的所有值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。 – Ben 2011-03-29 08:05:39

+0

現在編輯也許更清楚了,謝謝 – kn3l 2011-03-29 08:08:40

+0

和值只能是03,04,05,06和07? – Ben 2011-03-29 08:14:56

回答

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); 

希望幫助!

相關問題