I wrote this function recently when I could not find it in the PHP function list. Please provide any optimizations you discover!
function permute($array)
{
$results = array();
if (count($array) == 1)
{
$results[] = $array;
}
else
{
for ($i = 0; $i < count($array); $i++)
{
$first = array_shift($array);
$subresults = permute($array);
array_push($array, $first);
foreach ($subresults as $subresult)
{
$results[] = array_merge(array($first), $subresult);
}
}
}
return $results;
}
assert(permute(array()) == array());
assert(permute(array(1)) == array(array(1)));
assert(permute(array(1,2)) == array(array(1,2),array(2,1)) ||
permute(array(1,2)) == array(array(2,1),array(1,2)));
assert(count(permute(array(1,2,3)) == 6));
assert(count(permute(array(1,2,3,4)) == 24));
Thanks David, this method saved my life. Keep it up, may god bless you!