配列を任意の個数で分割したい

array_chunk() みたいに全部均等ではなく, 3個, 2個, 2個, 6個, 1個, 1個 ... みたいに分割数が可変な配列を作りたかったときに地味にハマったのでメモ

<?php
$src = range(1, 15);
$chunks = [3, 2, 2, 6, 1, 1]; // 分割したい個数
$offset = 0;
$values = [];
foreach ($chunks as $chunk) {
    $values[] = array_slice($src, $offset, $chunk);
    $offset += $chunk;
}

結果

array(6) {
  [0]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
  }
  [1]=>
  array(2) {
    [0]=>
    int(4)
    [1]=>
    int(5)
  }
  [2]=>
  array(2) {
    [0]=>
    int(6)
    [1]=>
    int(7)
  }
  [3]=>
  array(6) {
    [0]=>
    int(8)
    [1]=>
    int(9)
    [2]=>
    int(10)
    [3]=>
    int(11)
    [4]=>
    int(12)
    [5]=>
    int(13)
  }
  [4]=>
  array(1) {
    [0]=>
    int(14)
  }
  [5]=>
  array(1) {
    [0]=>
    int(15)
  }
}

ちなみにハマったとこは最初 $offset 使わずに $values[] = array_slice($src, count($values), $chunk); みたいな書き方してて、当たり前だけど offset が1個ずつしか増えてかんくて, 「なんで!??!?!?!?!」ってなってた🥰クソバカ🥰

参考

www.php.net

bashalog.c-brains.jp