拆分php数组[关闭]

i am using $_POST for getting all input values and it generates an array like:

[seen1] => 1
[flag1] => 0
[time1] => 275
[qtsnums1] => 17
[seen2] => 0
[flag2] => 0
[time2] => 0
[qtsnums2] => 11
[seen3] => 0
[flag3] => 0
[time3] => 0
[qtsnums3] => 9
[seen4] => 0
[flag4] => 0
[time4] => 0
[qtsnums4] => 5
[seen5] => 0
[flag5] => 0
[time5] => 0
[qtsnums5] => 10

i want to split:

[seen1] => 1
[flag1] => 0
[time1] => 275
[qtsnums1] => 17

and insert in 1 variable, how to do this?

Assuming your input array is named $input, you can create your new array using this:

$output = array();
$wantedKeys = array('seen1', 'flag1', 'time1', 'qtsnums1');
foreach ($wantedKeys as $key)
{
    $output[$key] = $input[$key];
}
print_r($output);

To get list containing first four keys, regardless how they are named:

$wantedKeys = array_slice(array_keys($input), 0, 4);

You can also use aforementioned array_chunk. If you want to get away with one-liner, you can do this:

$output = current(array_chunk($input, 4, true));

Note that it generates warning about references in newer versions of PHP. In such case you can use this:

$output = array_chunk($input, 4, true)[0];

This, however, will generate syntax error on older PHPs.

array_chunk will help you splitting the array:

$new = array_chunk($_POST, 4, true) ; //Do not forget to use TRUE to save indices

$desired_result = $new[0] ;
var_dump($desired_result) ;

Yeah array_slice() will do if you need only the first 4. But following is a general one, which splits the input array to different chunks.

$array = array(
    'seen1' => 1,
    'flag1' => 0,
    'time1' => 3,
    'qtsnums1' => 4,
    'seen2' => 1,
    'flag2' => 0,
    'time2' => 3,
    'qtsnums2' => 4,
    'seen3' => 1,
    'flag3' => 0,
    'time3' => 3,
    'qtsnums3' => 4,
);

$new_array = array();

foreach($array as $key => $value){
    preg_match('/([^0-9]+)(\d+)/', $key, $matches);
    $new_array[$matches[2]][$matches[1]] = $value;
}
print_r($new_array);

Output will be as follows

Array
(
    [1] => Array
        (
            [seen] => 1
            [flag] => 0
            [time] => 3
            [qtsnums] => 4
        )

    [2] => Array
        (
            [seen] => 1
            [flag] => 0
            [time] => 3
            [qtsnums] => 4
        )

    [3] => Array
        (
            [seen] => 1
            [flag] => 0
            [time] => 3
            [qtsnums] => 4
        )

)

So giving $new_array[1] will get the 1st chunk and $new_array[2] will get 2nd chunk and so on.