fork download
  1. <?php
  2. $a = Array( 1, 2, 3 );
  3.  
  4. function combi( $arr, $length ) {
  5. if( $length == 1 ) {
  6. return $arr;
  7. } else {
  8. $shorter = combi( $arr, $length - 1 );
  9.  
  10. $new = Array();
  11. foreach( $shorter as $prefix ) {
  12. if( strlen( $prefix ) == $length - 1 ) {
  13. foreach( $arr as $suffix ) {
  14. $new[] = $prefix . $suffix;
  15. }
  16. }
  17. }
  18.  
  19. return array_merge( $shorter, $new );
  20. }
  21. }
  22.  
  23. var_dump( combi( $a, count( $a ) ) );
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
array(39) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  string(2) "11"
  [4]=>
  string(2) "12"
  [5]=>
  string(2) "13"
  [6]=>
  string(2) "21"
  [7]=>
  string(2) "22"
  [8]=>
  string(2) "23"
  [9]=>
  string(2) "31"
  [10]=>
  string(2) "32"
  [11]=>
  string(2) "33"
  [12]=>
  string(3) "111"
  [13]=>
  string(3) "112"
  [14]=>
  string(3) "113"
  [15]=>
  string(3) "121"
  [16]=>
  string(3) "122"
  [17]=>
  string(3) "123"
  [18]=>
  string(3) "131"
  [19]=>
  string(3) "132"
  [20]=>
  string(3) "133"
  [21]=>
  string(3) "211"
  [22]=>
  string(3) "212"
  [23]=>
  string(3) "213"
  [24]=>
  string(3) "221"
  [25]=>
  string(3) "222"
  [26]=>
  string(3) "223"
  [27]=>
  string(3) "231"
  [28]=>
  string(3) "232"
  [29]=>
  string(3) "233"
  [30]=>
  string(3) "311"
  [31]=>
  string(3) "312"
  [32]=>
  string(3) "313"
  [33]=>
  string(3) "321"
  [34]=>
  string(3) "322"
  [35]=>
  string(3) "323"
  [36]=>
  string(3) "331"
  [37]=>
  string(3) "332"
  [38]=>
  string(3) "333"
}