Вы еще не получили отточенное / полностью продуманное решение, поэтому я предложу его.
При определении необходимости создания нового инкрементного ключа необходимо выполнить две важные проверки:
- Если это не первая итерация, а
- текущий ключ минус (предыдущий ключ + 1) не равен 0.
Код: ( Демо )
$array = [
1 => 'world',
2 => 'is',
3 => 'a',
4 => 'wonderfull',
6 => 'in',
8 => 'our'
];
$prev = -1;
$i = 0;
foreach ($array as $key => $val) {
if (++$prev && $key - $prev) { // $prev+1 != 0 AND $key-$prev+1 != 0
// or if ($prev > -1 && $key - $prev > 1 ) {
++$i; // increment index
}
$result[$i][] = $val; // store the $val unconditionally
$prev = $key; // update $prev for next iteration
}
var_export($result);
Выход:
array (
0 =>
array (
0 => 'world',
1 => 'is',
2 => 'a',
3 => 'wonderfull',
),
1 =>
array (
0 => 'in',
),
2 =>
array (
0 => 'our',
),
)
Это решение генерирует индексированный массив, начиная с нуля, с моим вводом выборки и использует только один блок if. Напротив, решение AliveToDie генерирует массив с числовым ключом, начиная с 1, и использует два блока условий, содержащих избыточные строки кода.