PHP : Lister les combinaisons uniques de tags

Nouveau WRInaute
Bonjour,

J'aimerais pouvoir lister les combinaisons uniques d'un tableau de tags, exemple :

$tags = array("orange","citron","banane","pomme");

Nous donnerait :

(profondeur 1)

orange
citron
banane
pomme

(profondeur 2)

orange citron
orange banane
orange pomme

citron banane
citron pomme

banane pomme

(profondeur 3)

orange citron banane
orange citron pomme
orange banane pomme

citron banane pomme

(profondeur 4)

orange citron banane pomme

-----------------------------------

En fait cela équivaut à une imbriquation de for (4 dans cet exemple) comme suit :

Code:
for($i=1;$i<=$profondeur;$i++) {
  for($j=$i+1;$j<=$profondeur;$j++) {
    for($k=$j+1;$k<=$profondeur;$k++) {
      for($l=$k+1;$l<=$profondeur;$l++) {
      }
    }
  } 
}

J'ai pensé à la récursivité, mais je n'arrive pas à l'appliquer dans ce cas là, alors si quelqu'un pouvait me donner un petit coup de pouce, ce serait sympa.

Merci par avance !
 
WRInaute impliqué
Bonjour,
Voilà ma solution ad hoc:
Code:
$tags=array("orange","citron","banane","pomme");
$tags[]="";$r=array();$z=0;while($z<300){mt_srand();shuffle($tags);$o=join("%spl%",$tags);$o=explode("%spl%",$o,mt_rand(1,count($tags)));array_pop($o);sort($o);$o=join(" ",$o);if(!preg_match("`^\s*$`",$o)){$o=preg_replace("`\s+`"," ",trim($o));if(!in_array($o,$r)){$r[]=$o;$z=0;}else{$z++;}}}

echo"<pre>";print_r($r);echo"</pre>";
 
Nouveau WRInaute
Après un peu de jugeote, j'ai trouvé la solution :

Code:
$t = array("orange","citron","banane","pomme");
$n = count($t);
$ct = array(); // Tableau qui va contenir les rcombinaisons de tags

function listeCombi($debut,$tags,$profondeur) {
	global $ct;
	
	if($profondeur == 0) {
		array_push($ct,$debut);
		return;
	}
	$n = count($tags);
	for($i=0;$i<$n;$i++) {
		listeCombi($debut.$tags[$i].",",array_slice($tags,$i+1),$profondeur-1);
	}
}

for($i=1;$i<=$n;$i++) {
	listeCombi(",",$t,$i);
}

echo "<pre>";
print_r($ct);
echo"</pre>";

A bientot !
 
Discussions similaires
Haut