Я хочу сгенерировать всю комбинацию длины r из набора [0 … (n-1)]
Таким образом, выход должен быть таким (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));
с функцией, подобной
function permutate($select, $max)
где $ select = r и $ max = n
это моя текущая попытка, но мой мозг, похоже, не работает сегодня вечером, и он работает только для $ 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; }
заранее спасибо
Поскольку вам нужно неопределенное количество циклов, вам нужно будет сделать это рекурсивно:
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; }