1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
<?php
function _permutations(&$listeElements,$profondeur,$niveau,$arrComb,&$retour,&$arrCtl,$notionOrdre,$str="")
{
if ($niveau < ($profondeur-1))
{
for($l=0;$l<count($listeElements);$l++)
{
$ll = $listeElements[$l];
if (!in_array($ll,$arrComb))
{
$arrComb[$niveau] = $ll;
$niveau2 = $niveau;
$sep = $niveau == 0 ? '' : '|';
_permutations($listeElements,$profondeur,++$niveau2,$arrComb,$retour,$arrCtl,$notionOrdre,$str.$sep.$ll);
}
unset($arrComb[$niveau]);
}
}
else
{
for($k1=0;$k1<count($listeElements);$k1++)
{
$kk = $listeElements[$k1];
if (!in_array($kk,$arrComb))
{
$uneLigne = $str == '' ? $kk : $str.'|'.$kk;
$elem = explode('|',$uneLigne);
if (!$notionOrdre)
{
asort($elem);
$uneLigne = implode('|',$elem);
}
if (!in_array($uneLigne,$arrCtl))
{
$arrCtl[] = $uneLigne;
$retour[] = $elem;
}
}
}
}
} // function _permutations
function permutations($listeElements,$profondeur,$notionOrdre=true)
{
$arrComb = array();
$retour = array();
$arrCtl = array();
_permutations($listeElements,$profondeur,0,$arrComb,$retour,$arrCtl,$notionOrdre);
return $retour;
} // function permutations
$a = array("A","B","C","D");
print "Sans notion d'ordre :<br/>";
for($b=1;$b<=4;$b++) {
foreach(permutations($a,$b,false) as $key => $subarray) {
foreach($subarray as $key2 => $value) {
print "$value - ";
}
print "<br/>";
}
}
print "<br/>";
print "Avec notion d'ordre :<br/>";
for($b=1;$b<=4;$b++) {
foreach(permutations($a,$b) as $key => $subarray) {
foreach($subarray as $key2 => $value) {
print "$value - ";
}
print "<br/>";
}
} |
Partager