fork download
  1. <?php
  2.  
  3. function Combinations($arr,$n){
  4.  
  5. if(count($arr) === 0) return;
  6. if($n === 1){
  7. $out = [];
  8. foreach($arr as $b){
  9. $out[] = [$b];
  10. }
  11. return $out;
  12. }else{
  13.  
  14. $base = Combinations($arr,$n-1);
  15. $out = [];
  16.  
  17. foreach($base as $val){
  18.  
  19. $last = $val[$n-2];
  20. $found = false;
  21. foreach($arr as $key => $value){
  22. if($found === true){
  23. if($key < count($arr)){
  24.  
  25. $new = array_slice($val,0);
  26. $new[]=$value;
  27. $out[] = array_slice($new,0);
  28. }
  29. continue;
  30. }
  31. if($value === $last)
  32. $found = true;
  33. }
  34.  
  35. }
  36.  
  37. }
  38.  
  39. return $out;
  40.  
  41.  
  42. }
  43. $b= Combinations(array(1,2,3,4),4);
  44. $b[]= Combinations(array(1,2,3,4),3);
  45. $b[]= Combinations(array(1,2,3,4),2);
  46. print_r($b);
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [1] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 4
                )

            [2] => Array
                (
                    [0] => 1
                    [1] => 3
                    [2] => 4
                )

            [3] => Array
                (
                    [0] => 2
                    [1] => 3
                    [2] => 4
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                )

            [1] => Array
                (
                    [0] => 1
                    [1] => 3
                )

            [2] => Array
                (
                    [0] => 1
                    [1] => 4
                )

            [3] => Array
                (
                    [0] => 2
                    [1] => 3
                )

            [4] => Array
                (
                    [0] => 2
                    [1] => 4
                )

            [5] => Array
                (
                    [0] => 3
                    [1] => 4
                )

        )

)