fork download
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. function generateVariation($A, $i = 0){
  7.  
  8. $result = array();
  9.  
  10. if ($i < count($A)){
  11. $variations = generateVariation($A, $i + 1);
  12.  
  13. for ($j = 0; $j < count($A[$i]); $j++){
  14. if ($variations){
  15. foreach ($variations as $variation){
  16. $result[] = array_merge(array($A[$i][$j]), $variation);
  17. }
  18. }else{
  19. $result[] = array($A[$i][$j]);
  20. }
  21. }
  22. return $result;
  23. }
  24. }
  25.  
  26. $A = array(
  27. 0 => array(1),
  28. 1 => array(1,2,3),
  29. 2 => array(4,5,6)
  30. );
  31.  
  32. print_r(generateVariation($A, $i = 0));
Success #stdin #stdout 0.02s 24336KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 4
        )

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

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

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

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

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

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

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

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

)