Problème dans une imbrication de boucles for [PHP] - Programmation
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))
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...
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)
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"...
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.
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)
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.
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
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]