I'm trying to build a php script that, for a given number of cats and collars, builds an array of all possible permutations.
For example:
I have 4 different collars: A, B, C and D. If I have 1 cat, I have 4 possible permutations - they can be wearing collar A, B, C or D.
It turns out that the number of possible permutations is:
4nThus if I have 2 cats I have 16 possible permutations, 3 cats 64 permutations etc.
So, if I have the following code:
$collars = array('yellow','blue','green','pink');
$cats = array('bob','frank');
$no_cats = count($cats);
How can I get it to generate an array of these permutations?
Array
(
[0] => Array
(
[bob] => yellow,
[frank] => yellow
)
[1] => Array
(
[bob] => yellow,
[frank] => blue
)
[...]
[15] => Array
(
[bob] => pink,
[frank] => pink
)
)
Here's where I've got to (I know it's wrong not least because the number of collar loops is hardcoded to the number of cats):
$collars = array('yellow', 'blue', 'green', 'pink');
$cats = array('bob', 'frank');
$i = 0;
foreach ($collars as $collar_a){
foreach ($collars as $collar_b){
foreach ($cats as $cat){
$output[$i][$cat] = $collar_a;
$output[$i][$cat] = $collar_b;
}
$i++;
}
}
print_r($output);
This generates:
Array
(
[0] => Array
(
[bob] => yellow
[frank] => yellow
)
[1] => Array
(
[bob] => blue
[frank] => blue
)
[2] => Array
(
[bob] => green
[frank] => green
)
[3] => Array
(
[bob] => pink
[frank] => pink
)
[4] => Array
(
[bob] => yellow
[frank] => yellow
)
[5] => Array
(
[bob] => blue
[frank] => blue
)
[6] => Array
(
[bob] => green
[frank] => green
)
[7] => Array
(
[bob] => pink
[frank] => pink
)
[8] => Array
(
[bob] => yellow
[frank] => yellow
)
[9] => Array
(
[bob] => blue
[frank] => blue
)
[10] => Array
(
[bob] => green
[frank] => green
)
[11] => Array
(
[bob] => pink
[frank] => pink
)
[12] => Array
(
[bob] => yellow
[frank] => yellow
)
[13] => Array
(
[bob] => blue
[frank] => blue
)
[14] => Array
(
[bob] => green
[frank] => green
)
[15] => Array
(
[bob] => pink
[frank] => pink
)
)
It has the right number of loops but clearly not the right permutations. I suspect this can easily be solved by a self-referencing function but they're above my skill-level.
Any help would be enormously appreciated as I've been pulling my hair out over this for 2 days now!