combinación de php array

Quiero generar todas las combinaciones de longitud r de un conjunto [0 … (n-1)]

Entonces la salida debería ser así (n = 6 r = 2)

$res = array(array(0,1),array(0,2),array(0,3),array(0,4),array(0,5),array(1,2),array(1,3),array(1,4),array(1,5),array(2,3),array(2,4),array(2,5),array(3,4),array(3,5),array(4,5)); 

con una función como

 function permutate($select, $max) 

donde $ select = r y $ max = n

este es mi bash actual, pero mi cerebro no parece estar funcionando esta noche y solo funciona para $ select = 2

 function permutate($select, $max) { $out = array(); for( $i = 0; $i < ($max) ; $i++) { for ($x = ($i + 1); $x < ($max); $x++) { $temp = array($i); for($l = 0; $l < ($select-1); $l++) { if(($x+$l) < $max ) { array_push($temp, $x+$l); } } if(count($temp) == $select) { array_push($out, $temp); } } } return $out; } 

Gracias por adelantado

Como necesita un número indefinido de bucles, deberá hacerlo recursivamente:

 function permutation($select, $max) { if ($select === 1) { $result = range(0, $max); foreach ($result as &$entry) { $entry = array($entry); } return $result; } $result = array(); $previous = permutation($select - 1, $max - 1); foreach ($previous as $entry) { $last = end($entry); for ($i = $last + 1; $i <= $max; $i++) { $result[] = array_merge($entry, array($i)); } } return $result; }