Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数组拆分为非特定数量的chunck_Php_Arrays - Fatal编程技术网

Php 将数组拆分为非特定数量的chunck

Php 将数组拆分为非特定数量的chunck,php,arrays,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,,P1

我有一个字符串,其中包含用户从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
拿到绳子后,我把它炸开,形状变成这样

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
        )

)
如果您有任何建议,请告诉我。非常感谢您这似乎有效:

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

?>

这似乎有效:

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

?>

假设我们所有东西都在里面
$p

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

使用v5和v7进行测试

假设我们在
$p

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

通过v5和v7测试,这可能是一种方法

<?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];
?>


请注意,我在开始时添加了一个,以保持“,”的完整性。

这可能是一种方法

<?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];
?>
$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;
      }
    }
  }

}


请注意,我在开始时添加了一个,以保持“,”的完整性。

array\u chunk()
这样做吗?@Rasclatt确实如此,但aswers并不总是相同的。“一次等于四次,一次等于六次。@JoseManuelAbarcaRodríguez是的,你是对的。这些都是很好的答案。我用str_replace删除了它们哦,我明白你在说什么了。那么你需要一个循环。
array\u chunk()
不是这样做的吗?@Rasclatt是这样做的,但是aswers并不总是一样的。“一次等于四次,一次等于六次。@JoseManuelAbarcaRodríguez是的,你是对的。这些都是很好的答案。我用str_replace删除了它们哦,我明白你在说什么了。那么你需要一个循环。非常感谢!这是解决方案:)更改
elseif(
值){完美;@JustOnUnderMillions添加了您的建议非常感谢!这是解决方案:)更改
elseif($value){
完美;@JustOnUnderMillions添加了您的建议为什么“这是一种方法”一个好的答案总是要解释做了什么以及为什么这样做,不仅是为了OP,而且是为了SO的未来访客。为什么“这是一种方法”?一个好的答案总是要解释做了什么以及为什么这样做,不仅是为了OP,也是为了SO的未来访客。
$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;
      }
    }
  }

}