se détacher de if et foreach
j'ai une boucle pour chaque boucle et une déclaration if. Si une correspondance est trouvée, je dois finir par me détacher de l'avant-bras.
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>
}
}
4 réponses
if
n'est pas une structure de boucle, donc vous ne pouvez pas "en sortir".
vous pouvez, cependant, sortir du foreach
en appelant simplement break
. Dans votre exemple, il a l'effet désiré:
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 trébuchent sur cette question à la recherche d'une réponse..
break
prend un argument optionnel, qui définit combien structures de boucle il devrait casser. 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 "!";
sortie résultante:
1 3 2 1 !
si - pour une raison obscure - vous voulez break
hors d'une déclaration if
(qui n'est pas une structure de boucle et donc non cassable) par définition), vous pouvez simplement envelopper votre if
dans une structure de boucle minuscule de sorte que vous pouvez sauter hors de ce bloc de code.
s'il vous Plaît noter que ce est un total de hack et normalement vous ne voulez 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 les docs PHP
si vous vous interrogez sur la syntaxe: elle fonctionne parce qu'une syntaxe abrégée est utilisée ici. Les bagues extérieures bouclées peut être exclu parce que la structure de boucle ne contient qu'une seule instruction: if ($foo) { .. }
.
un autre exemple pour ce:
do $i++; while ($i < 100)
est l'équivalent de 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
. Qui va le faire.
une façon plus sûre d'aborder la rupture d'une boucle foreach
ou while
en PHP consiste à insérer une contre-variable incrémentante et if
conditionnelle à l'intérieur de la boucle originale. Cela vous donne un contrôle plus serré que break;
qui peut causer des ravages 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 qui atterrissent ici, mais qui cherchent 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 casser quand vous êtes à l'intérieur do_this_for_even.php vous devez utiliser return. Utiliser break ou continue va retourner cette erreur: ne peut pas break / continue 1 niveau. J'ai trouvé plus de détails ici