salir de if y foreach
Tengo un bucle foreach y una declaración if. Si se encuentra una coincidencia, finalmente necesito salir del 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
no es una estructura de bucle, por lo que no se puede "salir de ella".
Sin embargo, puedes escapar del foreach
simplemente llamando al break
. En su ejemplo tiene el efecto deseado:
$device = "wanted";
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 immediately and also the if statement
break;
some_function(); // never reached!
}
another_function(); // not executed after match/break
}
Solo para completar para otros que se topan con esta pregunta en busca de una respuesta.
break
toma un argumento opcional, que define cuántas estructuras de bucle debe romper. Ejemplo:
foreach (['1','2','3'] as $a) {
echo "$a ";
foreach (['3','2','1'] as $b) {
echo "$b ";
if ($a == $b) {
break 2; // this will break both foreach loops
}
}
echo ". "; // never reached!
}
echo "!";
Salida resultante:
1 3 2 1 !
foreach($equipxml as $equip) {
$current_device = $equip->xpath("name");
if ( $current_device[0] == $device ) {
// found a match in the file
$nodeid = $equip->id;
break;
}
}
Simplemente use break
. Eso bastará.
Una forma más segura de abordar la ruptura de un bucle foreach
o while
en PHP es anidar una variable de contador incremental y if
un condicional dentro del bucle original. Esto le brinda un control más estricto que break;
el que puede causar estragos en otras partes de una página complicada.
Ejemplo:
// 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;