fork(2) download
  1. <?php
  2.  
  3. function sampling($days, $size, $combinations = array()) {
  4.  
  5. # if it's the first iteration, the first set
  6. # of combinations is the same as the set of characters
  7. if (empty($combinations)) {
  8. $combinations = array_map(function($day) { return array($day); }, $days);
  9. }
  10.  
  11. # we're done if we're at size 1
  12. if ($size == 1) {
  13. return $combinations;
  14. }
  15.  
  16. # initialise array to put new values in
  17. $new_combinations = array();
  18.  
  19. # loop through existing combinations and character set to create strings
  20. foreach ($combinations as $combination) {
  21. foreach ($days as $day) {
  22. if (!in_array($day, $combination)) {
  23. $new_combination = $combination;
  24. $new_combination[] = $day;
  25. $new_combinations[] = $new_combination;
  26. }
  27. }
  28. }
  29.  
  30. # call same function again for the next iteration
  31. return sampling($days, $size - 1, $new_combinations);
  32. }
  33.  
  34. $days = array('Monday', 'Tuesday', 'Thursday');
  35.  
  36. print_r(sampling($days, 2));
  37. print_r(sampling($days, 3));
Success #stdin #stdout 0.01s 52488KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [0] => Monday
            [1] => Tuesday
        )

    [1] => Array
        (
            [0] => Monday
            [1] => Thursday
        )

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

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

    [4] => Array
        (
            [0] => Thursday
            [1] => Monday
        )

    [5] => Array
        (
            [0] => Thursday
            [1] => Tuesday
        )

)
Array
(
    [0] => Array
        (
            [0] => Monday
            [1] => Tuesday
            [2] => Thursday
        )

    [1] => Array
        (
            [0] => Monday
            [1] => Thursday
            [2] => Tuesday
        )

    [2] => Array
        (
            [0] => Tuesday
            [1] => Monday
            [2] => Thursday
        )

    [3] => Array
        (
            [0] => Tuesday
            [1] => Thursday
            [2] => Monday
        )

    [4] => Array
        (
            [0] => Thursday
            [1] => Monday
            [2] => Tuesday
        )

    [5] => Array
        (
            [0] => Thursday
            [1] => Tuesday
            [2] => Monday
        )

)