[PHP] Problème dans une imbrication de boucles for

Problème dans une imbrication de boucles for [PHP] - Programmation

Marsh Posté le 15-02-2002 à 15:07:13    

$verif_mots = explode(" ", $chaine);
for ($i=0; $i<count($verif_mots); $i++) {
  echo $verif_mots[$i]." "; // [1]
  for ($j=0; $j<count($mots); $j++) {
    echo $verif_mots[$i]." "; // [2]
    if ($mots[$j]!=$verif_mots[$i] && strlen($verif_mots[$i])>=5) {
      $motscles[] = $verif_mots[$i];
    }
   }
}
 
Ca sert à générer des mots clés pour un texte. Les mots du texte sont dans $verif_mots. $mots[] est un tableau avec les mots interdits récupéré avec un file() à partir d'un fichier.
 
Maintenant le problème : à priori [1] et [2] devrait afficher la même chose ! Pourtant l'insctruction [1] affiche bien une fois chaque mot du tableau mais [2] les affiche 2 fois. Par exemple si $verif_mots ( 0 => "sécurité", 1 => "informatique" ) eh bien avec :
[1] Ca affiche sécurité informatique
[2] Ca affiche sécurité sécurité informatique informatique
 
Je comprends pas pourquoi et j'ai vraiment besoin de votre aide SVP.

 

[jfdsdjhfuetppo]--Message édité par Dost67--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 15-02-2002 à 15:07:13   

Reply

Marsh Posté le 15-02-2002 à 16:00:22    

.

Reply

Marsh Posté le 15-02-2002 à 16:39:19    

..

Reply

Marsh Posté le 15-02-2002 à 17:09:21    

Donc j'ai essayé de résoudre le pb en utilisant des foreach mais ça n'a pas fonctionné. Mais j'ai réussi à contourner le pb. Voici pour si ça intéresse :
 
$mots2 = implode(" ", $mots);
 
Comme ça à l'endroit du [1] où il n'y a pas de pb j'utilise un expression régulière :
 
if (preg_match("/".$verif_mots."/i", $mots2))

Reply

Marsh Posté le 15-02-2002 à 17:21:05    

ça affichera autant de fois le mot "$verif_mots[$i] que la longueur de ton tableau "$mot".
 
je vois pas ou est le probème...

Reply

Marsh Posté le 15-02-2002 à 17:21:19    

euh ca marche les comparaisons de chaine avec != et == ?
 
perso j utilise strcmp(chaine1,chaine2) et strcasecmp(chaine1,chaine2)


---------------
Fait le ou ne le fait pas ... Essayer ne sert à rien !
Reply

Marsh Posté le 15-02-2002 à 19:25:14    

ethernal a écrit a écrit :

ça affichera autant de fois le mot "$verif_mots[$i] que la longueur de ton tableau "$mot".
 
je vois pas ou est le probème...  




 
Oh si y'a un très gros pb. Avec $verif_mots ( 0 => "sécurité", 1 => "informatique" ) si je mets mon instruction echo $verif_mots[$i]." "; à la ligne [1] (et que je la vire en [2]) ça affiche "sécurité informatique" et si je la mets à la ligne [2] (et que je la vire en [1]) ça affiche "sécurité sécurité informatique informatique"...

Reply

Marsh Posté le 15-02-2002 à 19:26:05    

reddwarf a écrit a écrit :

euh ca marche les comparaisons de chaine avec != et == ?
 
perso j utilise strcmp(chaine1,chaine2) et strcasecmp(chaine1,chaine2)  




 
Le pb ne se situe pas à ce niveau puisqu'il est déjà à l'endroit [2] mais sinon oui ça fonctionne. Moi je n'utilise jamais strcmp.

Reply

Marsh Posté le 15-02-2002 à 20:43:20    

Dost67 a écrit a écrit :

 
 
Oh si y'a un très gros pb. Avec $verif_mots ( 0 => "sécurité", 1 => "informatique" ) si je mets mon instruction echo $verif_mots[$i]." "; à la ligne [1] (et que je la vire en [2]) ça affiche "sécurité informatique" et si je la mets à la ligne [2] (et que je la vire en [1]) ça affiche "sécurité sécurité informatique informatique"...  




 
bha oui c normal c'est ça que tu lui demandes à ton morceau de pgm...  
puisque ton $i n'est pas incrémenté dans ta seconde boucle, il va t'afficher $verif_mots[$i] autant de fois que tu as d'éléments dans $mots.
 
Que veux tu comme résultat dans $motcles[] ?
(donne un exemple de contenu de $verif_mots, $mots, et le résultat dans $motcle. ça sera plus facile)

Reply

Marsh Posté le 15-02-2002 à 21:45:52    

C'est exact !! Je n'avais pas fait attention. $mots contenait :
0 => "noter"
1 => "securite"
Comme y'en a 2 c'est pour ça que ça s'affichait 2 fois.

Reply

Marsh Posté le 15-02-2002 à 21:45:52   

Reply

Marsh Posté le 15-02-2002 à 21:48:11    

$verif_mots contient :
0 => a // qui va virer car >5 caractères
1 => noter // qui est censé virer aussi car mot interdit
2 => une // >5 car
3 => conference // celui qui doit rester
4 => sur // >5 car
5 => la
6 => securite // mot interdit

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed