J'ai une boucle foreach et une instruction if. Si une correspondance est trouvée, je dois finalement sortir du foreach.
foreach($equipxml as $equip) {
$current_device = $equip->xpath("name");
if ( $current_device[0] == $device ) {
// found a match in the file
$nodeid = $equip->id;
<break out of if and foreach here>
}
}
if
n'est pas une structure en boucle, vous ne pouvez donc pas "en sortir".
Vous pouvez cependant sortir de foreach
en appelant simplement break
. Dans votre exemple, l'effet souhaité est le suivant:
foreach($equipxml as $equip) {
$current_device = $equip->xpath("name");
if ( $current_device[0] == $device ) {
// found a match in the file
$nodeid = $equip->id;
// will leave the foreach loop and also the if statement
break;
}
this_command_is_not_executed_after_a_match_is_found();
}
Juste pour être complet pour les autres qui tombent sur cette question à la recherche d’une réponse.
break
prend un argument optionnel, qui définit le nombre de structures de boucle à rompre. Exemple:
foreach (array('1','2','3') as $a) {
echo "$a ";
foreach (array('3','2','1') as $b) {
echo "$b ";
if ($a == $b) {
break 2; // this will break both foreach loops
}
}
echo ". "; // never reached
}
echo "!";
Résultat obtenu:
1 3 2 1!
Si - pour une raison obscure - vous voulez break
sur une instruction if
(qui n'est pas une structure en boucle et n'est donc pas cassable par définition), vous pouvez simplement envelopper votre if
dans une structure en boucle minuscule afin vous pouvez sortir de ce bloc de code.
Veuillez noter qu'il s'agit d'un piratage total et que normalement vous ne voudriez pas le faire:
do if ($foo)
{
// Do something first...
// Shall we continue with this block, or exit now?
if ($abort === true) break;
// Continue doing something...
} while (false);
L'exemple ci-dessus est tiré d'un commentaire dans la documentation PHP _
Si vous vous interrogez sur la syntaxe: Cela fonctionne car une syntaxe abrégée est utilisée ici. Les accolades extérieures peuvent être omises car la structure de la boucle ne contient qu'une seule instruction: if ($foo) { .. }
.
Un autre exemple pour cela:do $i++; while ($i < 100)
est équivalent à do { $i++; } while ($i < 100)
.
foreach($equipxml as $equip) {
$current_device = $equip->xpath("name");
if ( $current_device[0] == $device ) {
// found a match in the file
$nodeid = $equip->id;
break;
}
}
Utilisez simplement break
. Ça va le faire.
Une méthode plus sûre pour rompre une boucle foreach
ou while
dans PHP consiste à imbriquer une variable de compteur incrémentante et la condition if
à l'intérieur de la boucle d'origine. Cela vous donne un contrôle plus étroit que break;
, ce qui peut causer des dégâts ailleurs sur une page compliquée.
Exemple:
// Setup a counter
$ImageCounter = 0;
// Increment through repeater fields
while ( condition ):
$ImageCounter++;
// Only print the first while instance
if ($ImageCounter == 1) {
echo 'It worked just once';
}
// Close while statement
endwhile;
Pour ceux d'entre vous atterrissant ici mais cherchant comment sortir d'une boucle qui contient une instruction include, utilisez return au lieu de break ou continue.
<?php
for ($i=0; $i < 100; $i++) {
if (i%2 == 0) {
include(do_this_for_even.php);
}
else {
include(do_this_for_odd.php);
}
}
?>
Si vous voulez faire une pause quand vous êtes dans do_this_for_even.php, vous devez utiliser return. Utiliser break ou continue va retourner cette erreur: Impossible de casser/continuer 1 niveau. J'ai trouvé plus de détails ici