Для тренировки мозга попробовали сделать вот так:
function process($input, $k, array $prefix = array())
{
$result = [];
if ( $k === 1 )
{
foreach ($input as $item)
{
$result[] = array_merge($prefix, [$item]);
}
}
else
{
$n = count($input);
$m = $n - $k + 1;
for ( $i = 1; $i <= $m; $i++ )
{
$subInput = array_slice($input, $i, $k);
$subPrefix = array_merge($prefix, [$input[$i-1]]);
$r = process($subInput, $k-1, $subPrefix);
$result = array_merge($result, $r);
}
}
return $result;
}
$input = [1, 2, 3, 4, 5];
$k = 3;
$result = process($input, $k);
var_export($result);