skip to Main Content

$test = [
0 => [
'type' => 'separator',
'data' => 'separator1'
],
1 => [
'type' => 'image',
'data' => 'image1url'
],
3 => [
'type' => 'separator',
'data' => 'separator2'
],
4 => [
'type' => 'video',
'data' => 'video1url'
],
5 => [
'type' => 'image',
'data' => 'image3url'
],
];

I have an array that has multiple arrays in it. I need to separate the array into multiple arrays like the example below.


$array1 = [

0 => [
'type' => 'separator',
'data' => 'separator1'
],
1 => [
'type' => 'image',
'data' => 'image1url'
],
];

$array2 = [
0 => [
'type' => 'separator',
'data' => 'separator2'
],
1 => [
'type' => 'video',
'data' => 'video1url'
],
2 => [
'type' => 'image',
'data' => 'image3url'
],
];

Is there any way to do such thing?
Please consider that the item-count between separators can be changed.

I tried to do it using a foreach but didn’t succeed.

2

Answers


  1. You can do that using ${} to create dynamic variables like:

     ${'array' . $counter} = 'your array';
    

    And also check for the presence of (‘type’ => ‘separator’) in a foreach, so you can increase the $counter.

    Login or Signup to reply.
  2. The following code:

    $test = [
    0 => [
    'type' => 'separator',
    'data' => 'separator1'
    ],
    1 => [
    'type' => 'image',
    'data' => 'image1url'
    ],
    3 => [
    'type' => 'separator',
    'data' => 'separator2'
    ],
    4 => [
    'type' => 'video',
    'data' => 'video1url'
    ],
    5 => [
    'type' => 'image',
    'data' => 'image3url'
    ],
    6 => [
    'type' => 'separator',
    'data' => 'separator3'
    ],
    7 => [
    'type' => 'video',
    'data' => 'video3url'
    ],
    8 => [
    'type' => 'image',
    'data' => 'image5url'
    ],
    ];
    
    $aaResult = [];
    $count=-1;
    foreach ($test as $subarray) {
        if ($subarray['type']=='separator') {
            $count++;
            $aaResult[$count] = [];
            $aaResult[$count][] = $subarray;
        }
        else {
            $aaResult[$count][] = $subarray;
        }
    }
    
    // if you want separate arrays ($array1, $array2,..) and not $aaResult[0], $aaResult[1],...
    $varNamePrefix='array';
    for ($i=0;$i<count($aaResult);$i++) {
        $varName = $varNamePrefix.($i+1);
        $$varName = $aaResult[$i];
    }
    print_r($array1);
    print_r($array2);
    print_r($array3);
    

    prints:

    Array
    (
        [0] => Array
            (
                [type] => separator
                [data] => separator1
            )
    
        [1] => Array
            (
                [type] => image
                [data] => image1url
            )
    
    )
    Array
    (
        [0] => Array
            (
                [type] => separator
                [data] => separator2
            )
    
        [1] => Array
            (
                [type] => video
                [data] => video1url
            )
    
        [2] => Array
            (
                [type] => image
                [data] => image3url
            )
    
    )
    Array
    (
        [0] => Array
            (
                [type] => separator
                [data] => separator3
            )
    
        [1] => Array
            (
                [type] => video
                [data] => video3url
            )
    
        [2] => Array
            (
                [type] => image
                [data] => image5url
            )
    
    )
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search