Arrêter une boucle for

Fermé
t671 Messages postés 1462 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 21 décembre 2024 - Modifié par t671 le 17/03/2016 à 16:04
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 18 mars 2016 à 21:28
Bonjour,

Comment arrêter une boucle for, inclus dans un while, pour que le while puisse continuer ?

$select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; 
$result2 = mysqli_query($link,$select2) or die ('Erreur : '.mysqli_error($link) );
while ($row2 = mysqli_fetch_array($result2)) 
{ ........................
$tonarray[0]=array("mariage" => "$marg_1" ,"date_mariage" => $row2['date_mariage_1'] , "conjoint" => $row2['num_cj_1']);
$tonarray[1]=array("mariage" => "$marg_2" ,"date_mariage" => $row2['date_mariage_2'] , "conjoint" => $row2['num_cj_2']); 
$tonarray[2]=array("mariage" => "$marg_3" ,"date_mariage" => $row2['date_mariage_3'] , "conjoint" => $row2['num_cj_3']); 
$tonarray[3]=array("mariage" => "$marg_4" ,"date_mariage" => $row2['date_mariage_4'] , "conjoint" => $row2['num_cj_4']); 
 
asort($tonarray);
 
         for($i=0; $i<=3; $i++)
 {
  if ($tonarray[$i]['conjoint'] != "") 
  { 
   $query4 = 'SELECT * FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ';
   $result4 = mysqli_query($link,$query4) or die(mysqli_error($link));
   $row4 = mysqli_fetch_array($result4);
................
                }
  else
  { end; }
 }    
$select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row2['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';   }
$result2 = mysqli_query($link,$select2) or die ('Erreur : '.mysqli_error($link) );

Si la condition if ($tonarray[$i]['conjoint'] != "") ne se vérifie pas, je voudrais arrêter la boucle for (else { end }), pour continuer le while !

Merci.
A voir également:

4 réponses

Utilisateur anonyme
17 mars 2016 à 17:49
Bonjour

C'est l'instruction
break
qui permet de sortir d'une boucle en PHP :
https://www.php.net/manual/fr/control-structures.break.php

C'est effectivement souvent bien pratique.
1
Je crois savoir pourquoi l'instruction break ne fonctionne pas chez moi .......... L'instruction es dans une boucle FOR, qui est elle même dans une boucle WHILE. Donc, les deux boucles sont arrêtés !!!!!
0
Utilisateur anonyme > t671
18 mars 2016 à 17:02
Non. Le break arrête le for, mais pas le while.
Si tu as lu le lien que je t'ai mis :
La valeur par défaut est 1, seulement la structure emboitée immédiate est interrompue.
Si ton while s'arrête aussi, c'est pour une autre raison, à toi de voir laquelle.
0
t671 Messages postés 1462 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 21 décembre 2024 11
17 mars 2016 à 16:45
Oui, mais parfois on peut avoir envie d'arrêter la boucle pour une raison quelconque !!!
0
t671 Messages postés 1462 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 21 décembre 2024 11
17 mars 2016 à 18:19
Merci, mais si je met break dans le else, ça marche pas !!!!
Par contre, tu vas peut-être pouvoir me trouver une solution ..........
Dans ma boucle ci-dessus, quand j'écris :
 if ($tonarray[$i]['conjoint'] != "") 

si la condition est ok, j'affiche les éléments liés à "conjoint" par un select.
Mais si la condition n'est pas ok, je veux tester avec le $i suivant.
Comment l'écrire ?
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
17 mars 2016 à 18:27
Je pense pas avoir compris ta question mais justement si ta condition dans est fausse, tu ne fais rien et tu laisse ton for se dérouler pour tester avec le prochain i.
0
Oui, mais justement, je veux arrêter le FOR en cours de route.......
Et comme le FOR est dans une boucle while, le break arrête le FOR et le while.
Moi je veux arrêter le FOR et continuer le WHILE.
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
Modifié par greg6614 le 18/03/2016 à 21:29
Tu peux rajouter un booleen dans ta condition de FOR qui lorsqu'il devient faux rend ta condition fausse.

Exemple avec ton code :

$select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; 
$result2 = mysqli_query($link,$select2) or die ('Erreur : '.mysqli_error($link) );
while ($row2 = mysqli_fetch_array($result2)) 
{ ........................
$tonarray[0]=array("mariage" => "$marg_1" ,"date_mariage" => $row2['date_mariage_1'] , "conjoint" => $row2['num_cj_1']);
$tonarray[1]=array("mariage" => "$marg_2" ,"date_mariage" => $row2['date_mariage_2'] , "conjoint" => $row2['num_cj_2']); 
$tonarray[2]=array("mariage" => "$marg_3" ,"date_mariage" => $row2['date_mariage_3'] , "conjoint" => $row2['num_cj_3']); 
$tonarray[3]=array("mariage" => "$marg_4" ,"date_mariage" => $row2['date_mariage_4'] , "conjoint" => $row2['num_cj_4']); 
 
asort($tonarray);
$stop = true;
 
         for($i=0; $i<=3 && $stop; $i++)
 {
  if ($tonarray[$i]['conjoint'] != "") 
  { 
   $query4 = 'SELECT * FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ';
   $result4 = mysqli_query($link,$query4) or die(mysqli_error($link));
   $row4 = mysqli_fetch_array($result4);
................
                }
  else
  { $stop = false; }
 }    
$select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row2['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';   }
$result2 = mysqli_query($link,$select2) or die ('Erreur : '.mysqli_error($link) );
0
Arkana0 Messages postés 6365 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
17 mars 2016 à 16:14
Bonjour,

Normalement, le principe d'une boucle c'est de tourner un nombre limité de fois, si ça n'est pas le cas, c'est qu'elle a été détournée de sa fonction originelle...
-1