Page 1 sur 1

probleme de boucles

Posté : 11 août 2005, 08:48
par HD
salut
avec ces 2 boucles
while ($id<30) {
$fp = fopen($adresse,"r");
(...)
while ( $ligne < $taille ) {
   switch ($titre[$ligne]) {
case is_numeric($titre[$ligne]):
   $valeur=$valeur.$titre[$ligne];;
   break;
case ".":
   $valeur=$valeur.$titre[$ligne];
   break;
case "0":
   $valeur=$valeur.$titre[$ligne];
   break;
default :
   break;
   }
   $ligne=$ligne+1;
   };
(...)
$id=$id+1;
}
il y a un petit probleme :
apres la ligne :
default :
   break;
je veux arreter la boucle switch (cad le 2eme while )
logiquement je met :
default :
   exit;
sauf que là, ce n'est pas la 2eme boucle qui s'arrete mais la 1ere (le 1er while ) ce que evidemment je ne veux pas
solution? merci

Posté : 11 août 2005, 09:16
par cerber
je comprend pas tellement ce que viens faire là ton exit().

Mais si tu veux couper X boucles sur une condition il faut faire break X;
donc dans ton cas
break 2;

Posté : 11 août 2005, 10:28
par Invité
l'exit c'est pour arreter la boucle
while ( $ligne < $taille ) { 
   switch ($titre[$ligne]) {
sans arreter le 1er while
mais ca marche pas car ca arrete bien le 2eme while mais aussi le 1er

Posté : 11 août 2005, 10:50
par Cyrano
Ajoute une clause dans ton while et modifie-le si tu arrives dans le "default" :
while ($id<30)
{
    $fp = fopen($adresse,"r");
    // (...)
    $continue = "ok";
    while ( $ligne < $taille && $continue == "ok")
    {
        switch ($titre[$ligne])
        {
            case is_numeric($titre[$ligne]):
            $valeur=$valeur.$titre[$ligne];
            break;
            case ".":
            $valeur=$valeur.$titre[$ligne];
            break;
            case "0":
            $valeur=$valeur.$titre[$ligne];
            break;
            default :
            $continue = "stop";
            break;
        }
        $ligne++;
    }
    // (...)
    $id++;
}

Posté : 11 août 2005, 13:40
par cerber
exit stoppe l'exécution du script ne coupe pas la boucle ...
voila la solution :
Note : Notez que contrairement à d'autres langages, la structure continue s'applique aux structures switch et de comporte différemment de break. Si vous avez un switch dans une boucle, et que vous souhaitez continuer jusqu'à la prochaine itération de la boucle extérieure, vous vous devez utiliser
continue 2;
.

Posté : 11 août 2005, 14:12
par HD.
ok merci a tous les 2
je vais utiliser continue 2;
et si jamais ca marche pas je vais faire comme Cyrano (j'aurais du y penser d'ailleurs :oops: )