Arrêter une boucle for

t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
greg6614 Messages postés 592 Date d'inscription   Statut Membre Dernière intervention   -
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
 
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
t671
 
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
 
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 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Oui, mais parfois on peut avoir envie d'arrêter la boucle pour une raison quelconque !!!
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   107
 
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
t671
 
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   Statut Membre Dernière intervention   107
 
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   Statut Modérateur Dernière intervention   182
 
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