PHP : Lister les combinaisons uniques de tags

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

charlieroot
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 31
Inscription: 5 Aoû 2005

PHP : Lister les combinaisons uniques de tags

Message le Lun Sep 24, 2007 17:26

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: Tout sélectionner
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 !

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Message le Lun Sep 24, 2007 20:51

Bonjour,
Voilà ma solution ad hoc:
Code: Tout sélectionner
$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>";

charlieroot
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 31
Inscription: 5 Aoû 2005

Message le Lun Sep 24, 2007 21:10

Ca marche !
Mais peux tu m'expliquer un peu le principe de ton code ?
N'y a t-il pas un moyen plus simple ?

En tout cas merci

charlieroot
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 31
Inscription: 5 Aoû 2005

Message le Lun Sep 24, 2007 21:55

Après un peu de jugeote, j'ai trouvé la solution :

Code: Tout sélectionner
$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 !


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité