Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1025 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Une boucle interne qui ne s'execute qu'une seule fois... :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Une boucle interne qui ne s'execute qu'une seule fois... :(

n°225144
TetardKing
Docteur square inside
Posté le 08-10-2002 à 15:58:53  profilanswer
 

Je vous explique mon pb :
 
J'ai deux tableaux, un corpus (ensemble de texte) et un thésaurus (un dico).
J'ai des phrases dans les deux, et j'aimerai savoir quelles sont les phrases qu'on retrouve dans les deux, quelque soit l'ordre des mots.
 
Pour que ca aille plus vite (le corpus fait 56.000 lignes et le thésaurus 27.000), j'ai mis le thésaurus dans des tableaux differents en fonction du nb d'espaces (et donc, du nb de mots).
 
J'ai donc en gros une grosse boucle, qui parcours le corpus, à l'interieure de laquelle, une boucle parcours le thésaurus.
 
Et ké passa :
Je commence la grosse boucle :
je prend donc la première ligne du corpus, fait un implode selon les espaces.
Si il n'y a pas d'espaces, un simple in_array suffit, ca, ca marche.
Je continue sur ma boucle interne :
Si il y a un seul espace, je prend ma ligne du thesaurus, la coupe, et regarde si les deux morceaux sont identiques. Si c'est le cas, y'a bon. Sinon, je parcours mon thésaurus.
fin de la boucle interne. On reprend au debut
 
Si il n'a rien trouvé, il passe à la ligne suivante.
Redebut de la boucle interne
Or, il prend bien la ligne suivante du corpus, mais ne fait pas la boucle interne ... :(
 
J'ai mis un compteur pour vérifier, il ne veux passer qu'une fois par la boucle interne... :cry::cry:
 
Pourquoi ??
Y'a une limitation en php ??
en perl, ca marcherait mieux ??
Qqn aurait il une soluce toute faite en expression regulière qui tient en une ligne ?? :cry::cry:
Merci beaucoup.
 
Ps : le code joint en annexes :

Code :
  1. while (list($key_c, $val_c) = each($corpus)) {  // on prend les expressions du corpus les unes apres les autres...
  2. $morceaux_c = explode (' ',$val_c); // on explose la ligne en morceaux_corpus  
  3. $j++;
  4. echo "<br>$j : $val_c, ";  // affichage de la ligne du corpus.
  5. $comptage = substr_count($val_c, " " );
  6. if ( $comptage == 0 ) {  // si il y a 0 espace
  7. echo substr_count($val_c, " " ) . " espace";
  8.  if (in_array($val_c,$mesh_0)) echo " <b>identiques $val_c</b>";
  9.  echo array_search ($val_c,$thesaurus_0); // ca, ca marche impec.
  10. }
  11.  
  12.      
  13. if ( $comptage == 1 ) {  // si il y a 1 espaces
  14. echo substr_count($val_c, " " ) . " espace";
  15.  while (list($key_t, $val_t)=each($thesaurus_1)) {  // on prend une ligne du thesaurus correspondant au nb de ligne
  16.  $k++;
  17.  $morceaux_t = explode (' ',$val_t);
  18.  $comparaison = array_intersect ($morceaux_c, $morceaux_t); // on compare si les tableaux sont identiques.
  19.  
  20.   if (sizeof($comparaison) == sizeof($morceaux_c)) {
  21.    $corel_mesh++;  // si ca correspond, on le note.
  22.   }
  23.  }
  24. }
  25. echo ", et on a fait $k comparaisons"; // le $k n'est incrémenté qu'une seule fois, lors du premier passage. Apres, il s'en fout ... :(
  26. $k=0;
  27. }


 
Donc, en gros, pour ceux qui ont le flemme, le deuxième

Code :
  1. while

ne s'execute qu'au premier passage... :(


Message édité par TetardKing le 08-10-2002 à 16:16:32
mood
Publicité
Posté le 08-10-2002 à 15:58:53  profilanswer
 

n°225212
Ace17
Posté le 08-10-2002 à 18:07:20  profilanswer
 

J'ai effectivement la flemme
C'est normal les = a la place des == dans les conditions des while?

n°225220
TetardKing
Docteur square inside
Posté le 08-10-2002 à 18:30:55  profilanswer
 

Je vais essayer, mais dans la mesure où ca marche...
 
:jap:

n°225236
Sh@rdar
Ex-PhPéteur
Posté le 08-10-2002 à 19:11:34  profilanswer
 

les = c'est normal avec un list() ou un each()
 
 
t'as esasyer de remplacer ton if ($comptage==1) par un else { ?
 
si ton comptage est différente de 0 ou 1 ta seconde boucle ne se fait pas..


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°225432
TetardKing
Docteur square inside
Posté le 09-10-2002 à 09:55:34  profilanswer
 

Quelqu'un du forum seti à trouvé ce qui marchait pas.
 
En fait, avant de faire le deuxième while, faut faire un reset($thesaurus_1), pour remettre le pointeur au debut....  [:toad666]  
 
 
Un grand merci à tous ceux qui on bien vouluy jetter un coup d'oeil, et en esperant que ca puisse servir à qqn d'autre.
 
:jap:

n°225437
omega2
Posté le 09-10-2002 à 10:12:11  profilanswer
 

TetardKing a écrit a écrit :

Quelqu'un du forum seti à trouvé ce qui marchait pas.
 
En fait, avant de faire le deuxième while, faut faire un reset($thesaurus_1), pour remettre le pointeur au debut....  [:toad666]  
 
 
Un grand merci à tous ceux qui on bien vouluy jetter un coup d'oeil, et en esperant que ca puisse servir à qqn d'autre.
 
:jap:



Comment tu fais ce reset là?
Tu suprimes et recré la variable ou il y a une fonction prévus pour?

n°225452
TetardKing
Docteur square inside
Posté le 09-10-2002 à 10:40:35  profilanswer
 

tu fait un reset($thesaurus_1) juste avant le while :
 

Code :
  1. if ( $comptage == 1 ) {  // si il y a 1 espaces  
  2. echo substr_count($val_c, " " ) . " espace";
  3. reset($thesaurus_1);
  4. while (list($key_t, $val_t)=each($thesaurus_1)) {  // on prend une ligne du thesaurus correspondant au nb de ligne  
  5. $k++;
  6. $morceaux_t = explode (' ',$val_t);


 
et là, ca marche ...  :ouch:


---------------
Da Breizh WoRlD DoMIna7iOn T3aM * Baptiste Mary blog
n°225474
Sh@rdar
Ex-PhPéteur
Posté le 09-10-2002 à 11:02:37  profilanswer
 

petit conseil d'optimisation
 
les parcours de tableau de type foreach() sont bien plus rapide que whille .. list .. each


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°225479
omega2
Posté le 09-10-2002 à 11:08:15  profilanswer
 

Sh@rdar a écrit a écrit :

petit conseil d'optimisation
 
les parcours de tableau de type foreach() sont bien plus rapide que whille .. list .. each



Mieux vaut être en php4 pour utiliser foreach(). ;)
Par contre, je sais pas si son code était prévus pour du php3 ou du php4.

n°225502
TetardKing
Docteur square inside
Posté le 09-10-2002 à 11:32:18  profilanswer
 

J'ai php 4.2.0 et il était prevu pour.
 
Bon, tres bien, je me met à foreach alors. Vu la tonne de truc à traiter, ca sera pas du luxe :jap:
 
foreach ($thesaurus_1 as $val_t) { ...
 
Haaaaa, ces débutants, je vous jure ... :sarcastic:


Message édité par TetardKing le 09-10-2002 à 11:35:18

---------------
Da Breizh WoRlD DoMIna7iOn T3aM * Baptiste Mary blog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Une boucle interne qui ne s'execute qu'une seule fois... :(

 

Sujets relatifs
PHP Connection ODBC[PHP MySQL] Problème d'apostrophe ! [MONGOLE INSIDE]
[PHP BB] Un ptit problème de mail[PHP] + XMLDOM besoin d'aide !!
[PHP] Afficher du text avec les retours à la ligne ???PHP: bon script de newsletter
[PHP] Comment connaître nom de l'ordi de l'utilisateur?[HTML PHP JAVASCRIPT] pb d'impression
[ASP] Besoin d'aide boucle DO WHILE...[PHP] Une petite question aux utilisateurs de phpmynews...
Plus de sujets relatifs à : [PHP] Une boucle interne qui ne s'execute qu'une seule fois... :(


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR