I have a set of data and I need to get all combinations.
For example I need to fill out 3 slots with numbers ranging 1-5
I found this class which works perfectly http://pyrus.sourceforge.net/Math_Combinatorics.html
code
$dataset = [
    1,2,3,4,5
];
$slots = 3;
$list = [];
require_once 'Combinatorics.php';
foreach((new Math_Combinatorics)->permutations($dataset, $slots) as $combination){
    $list[] = $combination;
}
print_r($list);
output
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
        )
    [2] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 1
        )
    [3] => Array
        (
            [0] => 2
            [1] => 1
            [2] => 3
        )
    [4] => Array
        (
            [0] => 3
            [1] => 1
            [2] => 2
        )
    [5] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 1
        )
    [6] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 4
        )
    [7] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 2
        )
    [8] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 1
        )
    [9] => Array
        (
            [0] => 2
            [1] => 1
            [2] => 4
        )
    [10] => Array
        (
            [0] => 4
            [1] => 1
            [2] => 2
        )
    [11] => Array
        (
            [0] => 4
            [1] => 2
            [2] => 1
        )
    [12] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
        )
    [13] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 2
        )
    [14] => Array
        (
            [0] => 2
            [1] => 5
            [2] => 1
        )
    [15] => Array
        (
            [0] => 2
            [1] => 1
            [2] => 5
        )
    [16] => Array
        (
            [0] => 5
            [1] => 1
            [2] => 2
        )
    [17] => Array
        (
            [0] => 5
            [1] => 2
            [2] => 1
        )
    [18] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 4
        )
    [19] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 3
        )
    [20] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 1
        )
    [21] => Array
        (
            [0] => 3
            [1] => 1
            [2] => 4
        )
    [22] => Array
        (
            [0] => 4
            [1] => 1
            [2] => 3
        )
    [23] => Array
        (
            [0] => 4
            [1] => 3
            [2] => 1
        )
    [24] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 5
        )
    [25] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 3
        )
    [26] => Array
        (
            [0] => 3
            [1] => 5
            [2] => 1
        )
    [27] => Array
        (
            [0] => 3
            [1] => 1
            [2] => 5
        )
    [28] => Array
        (
            [0] => 5
            [1] => 1
            [2] => 3
        )
    [29] => Array
        (
            [0] => 5
            [1] => 3
            [2] => 1
        )
    [30] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 5
        )
    [31] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 4
        )
    [32] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 1
        )
    [33] => Array
        (
            [0] => 4
            [1] => 1
            [2] => 5
        )
    [34] => Array
        (
            [0] => 5
            [1] => 1
            [2] => 4
        )
    [35] => Array
        (
            [0] => 5
            [1] => 4
            [2] => 1
        )
    [36] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 4
        )
    [37] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 3
        )
    [38] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 2
        )
    [39] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 4
        )
    [40] => Array
        (
            [0] => 4
            [1] => 2
            [2] => 3
        )
    [41] => Array
        (
            [0] => 4
            [1] => 3
            [2] => 2
        )
    [42] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 5
        )
    [43] => Array
        (
            [0] => 2
            [1] => 5
            [2] => 3
        )
    [44] => Array
        (
            [0] => 3
            [1] => 5
            [2] => 2
        )
    [45] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 5
        )
    [46] => Array
        (
            [0] => 5
            [1] => 2
            [2] => 3
        )
    [47] => Array
        (
            [0] => 5
            [1] => 3
            [2] => 2
        )
    [48] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 5
        )
    [49] => Array
        (
            [0] => 2
            [1] => 5
            [2] => 4
        )
    [50] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 2
        )
    [51] => Array
        (
            [0] => 4
            [1] => 2
            [2] => 5
        )
    [52] => Array
        (
            [0] => 5
            [1] => 2
            [2] => 4
        )
    [53] => Array
        (
            [0] => 5
            [1] => 4
            [2] => 2
        )
    [54] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )
    [55] => Array
        (
            [0] => 3
            [1] => 5
            [2] => 4
        )
    [56] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 3
        )
    [57] => Array
        (
            [0] => 4
            [1] => 3
            [2] => 5
        )
    [58] => Array
        (
            [0] => 5
            [1] => 3
            [2] => 4
        )
    [59] => Array
        (
            [0] => 5
            [1] => 4
            [2] => 3
        )
)
But what if each of the 3 slots had their own data set to choose from?
- Slot 1: Could contain 1-3
 - Slot 2: Could contain 4-6
 - Slot 3: Could contian 7-9
 
How to get all combinations from this?
important
The script must be dynamically structured so you can add or remove one or multiple slots