PHP : Lister les combinaisons uniques de tags

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

gueudz
Nouveau WRInaute
 
Messages: 31
Inscription: Ven Aoû 05, 2005 9:24

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 passionné
WRInaute passionné
 
Messages: 816
Inscription: Sam Mar 26, 2005 11:48

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>";

gueudz
Nouveau WRInaute
 
Messages: 31
Inscription: Ven Aoû 05, 2005 9:24

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

gueudz
Nouveau WRInaute
 
Messages: 31
Inscription: Ven Aoû 05, 2005 9:24

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 !


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 Julien Coquet, expert certifié officiellement par Google Analytics.

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 0 invités