The code fragment (function) allows to find the scheme of all possible combinations of a given number of elements and will return the array with all combinations. Optionally it allows to find also the combinations that dont include all elements. The examples show how to apply the code. Idea/basics of the code were taken from a nice contribution here: http://www.phpfreaks.com/phpref/21.php
Download
View Source (print view)
Rating : 4.7
Views : 214
<?php
//all functions
//*************
function getPermutations($length, $sublength, $index, $separator, $start)
{
$out_pattern = $out_scheme = array();
if ($sublength>$length) $sublength = $length;
$max = factorial($length);
echo "options = $sublength / $length, factorial = $max <br />n";
//for ($a=0; $a<$length; $a++) $options[$a] = $pattern[$a] = $a;
for ($a=$start; $a<($length+$start); $a++) $options[$a] = $pattern[$a] = $a;
for ($x=0; $x<$max; $x++)
{
$N = $x;
for ($i=1; $i<= $length;)
{
$pattern[($length+$start-$i)] = $N % $i;
$N = $N/$i;
$i++;
}
unset($perm);
$b = $options;
foreach($pattern AS $offset)
{
list($char) = array_splice($b, $offset, 1);
$perm[] = $char;
}
$m = array_slice ($perm, 0, $sublength);
$out_pattern[] = implode($m);
$out_scheme[] = join($separator, $m);
}
if ($index==0) return array_unique($out_scheme);
if ($index==1) return array_unique($out_pattern);
}
function factorial($s)
{
if($s) $r = $s * factorial($s - 1);
else $r = 1;
return $r;
}
//Basic example (output of scheme)
//********************************
$items=5; //amount of elements
$include=5; //amount of elements taken into account
$index=0; //output index: 0=scheme with separator, 1=numbers only
$separator='-'; //separator char for index=0
$start=1; //first number of scheme
$results1 = getPermutations($items, $include, $index, $separator, $start);
foreach ($results1 as $output) echo $output . "<br />n";
//Example how to apply and include also combinations without all elements (output of scheme)
//******************************************************************************************
$items=4;
$include=4;
$index=0;
$separator='-';
$start=1;
$results2 = $temp = array();
for($a1=1; $a1<=$include; $a1++)
{
$temp = getPermutations($items, $a1, $index, $separator, $start);
$results2 = array_merge($results2, $temp);
}
foreach ($results2 as $output) echo $output . "<br />n";
//Example how to apply on a list of words
//***************************************
$words=array("fanta", "coke", "sprite", "budweiser");
$items=count($words);
$include=3;
//Note: output index has to be 0
$start=1;
$separator='-';
$results3 = getPermutations($items, $include, 0, $separator, $start);
for ($a2=($items+$start-1); $a2>=0; $a2--) $search[]=$a2;
$replace=array_reverse($words);
$results4=array();
for ($a1=0; $a1<count($results3); $a1++)
{
$results4[]=str_replace($search, $replace, $results3[$a1]);
}
//output with separator
foreach ($results4 as $output) echo $output . "<br />n";
//output without separator
foreach ($results4 as $output) echo str_replace($separator, '', $output) . "<br />n";
?>
page_link, 'php script, guestbook, doc, pdf, rtf, xsl files to a single pdf at runtime, utfraw, fedex, chat, design_in_php, eval, iaroi_adriana, rss, xslt, i need webmail login name and password, search results, project, php script" class="neww" target="_blank" title="im neuen, unction, yahoo status check, anton sorina, guest, php snips