2016-07-27 64 views
0

我有一個字符串,它包含用戶從qiuz給出的答案。該字符串保存在數據庫表中,並且具有這種形式。將數組拆分成非特定數量的塊

,P1,1,2,3,5,8,9,,P2,1,3,4,5,6,8,9,,P3,1,2,3,4,6,8,9,,P4,1,,P5a,b,,P5b,d,,P5c,a,,P5d,c,,P6,4,,P7,2,,P8a,hc,,P8b,df,,P8c,bg,,P8d,e,,P9,4,,P10,3,,P11,4,,P12,2,,P13,3,,P14,3,,P15a,acejg,,P15b,dfhib,,P16,1,3,,P17,2,,P18,1,,P19,3,,P20,3,5,6 

Ater得到的字符串我爆炸它,形式變成這樣。

Array 
(
    [0] => P1 
    [1] => 1 
    [2] => 2 
    [3] => 3 
    [4] => 5 
    [5] => 8 
    [6] => 9 
    [7] => P2 
    [8] => 1 
    [9] => 3 
    [10] => 4 
    [11] => 5 
    [12] => 6 
    [13] => 8 
    [14] => 9 
    [15] => P3 
    [16] => 1 
    [17] => 2 
    [18] => 3 
    [19] => 4 
    [20] => 6 
    [21] => 8 
    [22] => 9 
    [23] => P4 
    [24] => 1 
    [25] => P5a 
    [26] => b 
    [27] => P5b 
    [28] => d 
    [29] => P5c 
    [30] => a 
    [31] => P5d 
    [32] => c 
    [33] => P6 
    [34] => 4 
    [35] => P7 
    [36] => 2 
    [37] => P8a 
    [38] => hc 
    [39] => P8b 
    [40] => df 
    [41] => P8c 
    [42] => bg 
    [43] => P8d 
    [44] => e 
    [45] => P9 
    [46] => 4 
    [47] => P10 
    [48] => 3 
    [49] => P11 
    [50] => 4 
    [51] => P12 
    [52] => 2 
    [53] => P13 
    [54] => 3 
    [55] => P14 
    [56] => 3 
    [57] => P15a 
    [58] => acejg 
    [59] => P15b 
    [60] => dfhib 
    [61] => P16 
    [62] => 1 
    [63] => 3 
    [64] => P17 
    [65] => 2 
    [66] => P18 
    [67] => 1 
    [68] => P19 
    [69] => 3 
    [70] => P20 
    [71] => 3 
    [72] => 5 
    [73] => 6 
) 

每個問題都以"P"開頭。所以問題1將是"P1"問題2 "P2"等等。
每個給定的答案在"P"到下一個"P"之間。 因此,從用戶給出的問題編號1的答案是" 1 | 2 | 3 | 5 | 8 | 9 "。 我正試圖插入值到另一個數組與foreach循環,但我找不到任何方式來分離答案。

我的願望輸出是。

Array 
(
    [P1] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 5 
      [4] => 8 
      [5] => 9 
     ) 

    [P2] => Array 
     (
      [0] => 3 
      [1] => 4 
      [2] => 5 
      [3] => 6 
      [4] => 8 
      [5] => 9 
     ) 

) 

請告訴我,如果您有任何suggestions.Thank你非常

+0

不'array_chunk()'這樣做呢? – Rasclatt

+0

@Rasclatt它確實,但下流道不會總是一樣的。一次將是4次一次6. –

+1

@JoseManuelAbarcaRodríguez是的,你是對的。那些是emty的答案。我用str_replace刪除它們 –

回答

1

假設我們已經在心裏$p

$res= array(); 
foreach($p as $key => $value){ 
    if(strpos($value, "P") !== false){ 
     $currentP = $value; 
     $res[$currentP] = array(); 
    }elseif($value){ 
     $res[$currentP][] = $value; 
    }   
} 

WORKING PHP FIDDLE使用v5和v7

進行測試
+0

非常感謝!這是解決方案:) –

+1

更改'elseif($ value){'爲完美;) – JustOnUnderMillions

+0

@JustOnUnderMillions添加了您的建議 – Vanojx1

1

這似乎工作:

<?php 
$string = ',P1,1,2,3,5,8,9,,P2,1,3,4,5,6,8,9,,P3,1,2,3,4,6,8,9,,P4,1,,P5a,b,,P5b,d,,P5c,a,,P5d,c,,P6,4,,P7,2,,P8a,hc,,P8b,df,,P8c,bg,,P8d,e,,P9,4,,P10,3,,P11,4,,P12,2,,P13,3,,P14,3,,P15a,acejg,,P15b,dfhib,,P16,1,3,,P17,2,,P18,1,,P19,3,,P20,3,5,6'; 
$array = explode(',', $string); 
$return = array(); 
$index = ''; 
foreach ($array as $v) { 
    if (trim($v) == '') // Skip empty values 
     continue; 
    if (substr($v, 0, 1) == 'P') { 
     $index = $v; 
     if (!isset($return[$index])) 
      $return[$index] = array(); 
    } else { 
     $return[$index][] = $v; 
    } 
} 
var_dump($return); 

?> 
0

這可能是一個辦法

<?php 
$string = ',,P1,1,2,3,5,8,9,,P2,1,3,4,5,6,8,9,,P3,1,2,3,4,6,8,9,,P4,1,,P5a,b,,P5b,d,,P5c,a,,P5d,c,,P6,4,,P7,2,,P8a,hc,,P8b,df,,P8c,bg,,P8d,e,,P9,4,,P10,3,,P11,4,,P12,2,,P13,3,,P14,3,,P15a,acejg,,P15b,dfhib,,P16,1,3,,P17,2,,P18,1,,P19,3,,P20,3,5,6'; 

$sepAns = explode(',,',$string); 

    echo $sepAns[2]; 
?> 

注意,我添加了一個,一開始保持完整性 ',,'

+0

爲什麼「這是一種方法」?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –

0
$str = ',P1,1,2,3,5,8,9,,P2,1,3,4,5,6,8,9,,P3,1,2,3,4,6,8,9,,P4,1,,P5a,b,,P5b,d,,P5c,a,,P5d,c,,P6,4,,P7,2,,P8a,hc,,P8b,df,,P8c,bg,,P8d,e,,P9,4,,P10,3,,P11,4,,P12,2,,P13,3,,P14,3,,P15a,acejg,,P15b,dfhib,,P16,1,3,,P17,2,,P18,1,,P19,3,,P20,3,5,6'; 

$arr = explode(',', $str); 

$structuredArr = array(); 

foreach ($arr AS $element) { 

    if ((strpos($element, 'P') === FALSE) === FALSE) { 
    $key = $element; 
    $structuredArr[ $key ] = array(); 
    } else { 
    if (isset($key)) { 
     if (!empty($element)) { 
     $structuredArr[ $key ][] = $element; 
     } 
    } 
    } 

}