I haven't gotten anything working yet but I'm gonna have to get some sleep cos it's 4:55am
Here's what I have so far. There's a flaw in the condition it needs to recurse. I'll figure it out tomorrow.
Code: Select all
<?php
$array = array('r', 'g', 'b', 'w');
/*
w, r, g, b
w, b, g, r
w, g, b, r
w, g, r, b
w, b, r, g
w, r, b, g
b, w, r, g
b, w, g, r
b, g, w, r
b, g, r, w
b, r, w, g
b, r, g, w
r, w, g, b
r, w, b, g
r, b, w, g
r, b, g, w
r, g, b, w
r, g, w, b
g, w, r, b
g, w, b, r
g, b, r, w
g, b, w, r
g, r, w, b
g, r, b, w
w, r, b
w, b, r
r, w, b
r, b, w
b, w, r
b, r, w
r, g, b
r, b, g
b, g, r
b, r, g
g, b, r
g, r, b
w, g, b
w, b, g
b, w, g
b, g, w
g, w, b
g, b, w
w, r, g
w, g, r
g, r, w
g, w, r
r, w, g
r, g, w
w, r
r, w
w, b
b, w
w, g
g, w
r, g
g, r
r, b
b, r
g, b
b, g
r
w
b
g
*/
function factorial($num)
{
$sign = 1;
if ($num < 0) $sign = -1;
$num = abs($num);
$ret = 1;
$count = 0;
for ($count = 0; $count < $num; $count++)
{
$ret *= ($num-$count);
}
return $ret*$sign;
}
function get_all_combinations($array, $ret = array())
{
if (empty($ret)) foreach ($array as $v) $ret[] = array($v);
for ($i = 0; $i < factorial(count($array)); $i++)
{
if ($i == count($array)) $array = array_reverse($array);
$x = array_shift($array);
if (count($array) > 1 && $i <= count($array)) $ret = get_all_combinations($array, $ret);
array_push($array, $x);
$ret[] = $array;
}
return $ret;
}
print_r(get_all_combinations($array));