1

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

clarkk
  • 27,151
  • 72
  • 200
  • 340

0 Answers0