Php 如何在给定范围内打印所有可能的变化而不重复阵列?

Php 如何在给定范围内打印所有可能的变化而不重复阵列?,php,permutation,Php,Permutation,这就是我得到的: <?php // Program to print all // combination of size r // in an array of size n function printCombinations($arr, $n, $r) { $data = []; combinationUtil($arr, $data, 0, $n - 1, 0, $r); } function combinationUtil($arr, $data

这就是我得到的:

<?php 
// Program to print all 
// combination of size r 
// in an array of size n 
function printCombinations($arr, $n, $r) { 
    $data = []; 
    combinationUtil($arr, $data, 0, $n - 1, 0, $r); 
} 

function combinationUtil($arr, $data, $start, $end, $index, $r) { 
    if ($index == $r) { 
        for ($j = 0; $j < $r; $j++) {
            echo $data[$j]; 
        }
        echo "<br>"; 

        return; 
    } 

    for ($i = $start; $i <= $end && $end - $i + 1 >= $r - $index; $i++) { 
        $data[$index] = $arr[$i]; 
        combinationUtil($arr, $data, $i + 1, $end, $index + 1, $r); 
    } 
} 


$arr = [
    1,
    2,
    3,
    4,
    5
];
$r = 3; 
$n = count($arr); 
printCombinations($arr, $n, $r);
我需要的是:

123
124
125
132
134
135
142
143
145
152
153
154
213
214
215
231
234
235
241
243
245
251
253
254
312
314
315
321
324
325
341
342
345
351
352
354
412
413
414
415
421
423
425
431
432
435
451
452
453
512
513
514
521
523
524
531
532
534
541
542
543

您可以使用递归方法,该方法在数组上迭代,并在每次迭代中通过删除当前元素并在返回的变体前面加上它来调用自身

大概是这样的:



从数学上讲,你想要的不是排列,而是没有重复的变化。。。那正是。。。所有变化无重复@这是个好问题。。。我甚至没有注意到
5
丢失了…@Cid,这当然是无效的。。。。您不能要求小于数组计数的范围!基本上,我只需要获得所有可能的变化,而不需要重复,对于任何给定的数组,您可以设置单个输出的最大长度。。当然,你不能把范围设置得比你拥有的元素数高,因为你会有重复。。。
123
124
125
132
134
135
142
143
145
152
153
154
213
214
215
231
234
235
241
243
245
251
253
254
312
314
315
321
324
325
341
342
345
351
352
354
412
413
414
415
421
423
425
431
432
435
451
452
453
512
513
514
521
523
524
531
532
534
541
542
543