将数组拆分为非特定数量的chuncks

时间:2016-07-27 15:26:18

标签: php arrays

我有一个字符串,其中包含用户对qiuz的给定答案。此字符串保存在db表中,并且具有此表单。

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

)

请告诉我你是否有任何建议。非常感谢你

4 个答案:

答案 0 :(得分: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);

?>

答案 1 :(得分: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进行了测试

答案 2 :(得分: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];
?>

请注意,我在开头添加了一个,以保持',,'

的完整性

答案 3 :(得分: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;
      }
    }
  }

}