multidimensional - php foreach examples
salir de si y foreach (4)
Para aquellos de ustedes que aterrizan aquí, pero buscan cómo salir de un bucle que contiene un retorno de uso de declaración incluido en lugar de romper o continuar.
<?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 quieres romper cuando estás dentro de do_this_for_even.php necesitas usar return. El uso de break o continue devolverá este error: No se puede romper / continuar 1 nivel. Encontré más detalles here
Tengo un bucle foreach y una sentencia if. Si se encuentra una coincidencia, necesito romper con el 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>
}
}
Una forma más segura de acercarse a romper un bucle foreach
o while en PHP es anidar una variable de contador incremental y, if
condicional, dentro del bucle original. Esto le da un control más estricto que la break;
que puede causar estragos en otros lugares en 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;
if
no es una estructura de bucle, no puede "salir de ella".
Sin embargo, puede romper con el foreach
simplemente llamando a break
. En tu ejemplo tiene el efecto deseado:
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();
}
Sólo para completar para otros que tropiezan con esta pregunta en busca de una respuesta ...
break
toma un argumento opcional, que define cuántas estructuras de bucle debe romper. Ejemplo:
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 "!";
Resultado resultante:
1 3 2 1!
Si, por alguna extraña razón, quiere salir de una instrucción if
(que no es una estructura de bucle y, por lo tanto, no se puede break
por definición), simplemente puede ajustar su if
en una estructura de bucle pequeña para poder saltar de ese código bloquear.
Tenga en cuenta que este es un hack total y normalmente no querría hacer esto:
do if ($foo)
{
// Do something first...
// Shall we continue with this block, or exit now?
if ($abort === true) break;
// Continue doing something...
} while (false);
El ejemplo anterior está tomado de un comentario en la documentación de PHP.
Si se pregunta sobre la sintaxis: funciona porque aquí se utiliza una sintaxis abreviada. Las llaves externas se pueden omitir porque la estructura del bucle solo contiene una única instrucción: if ($foo) { .. }
.
Otro ejemplo para esto:
do $i++; while ($i < 100)
do $i++; while ($i < 100)
es equivalente a do { $i++; } while ($i < 100)
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;
}
}
Simplemente use break
. Eso lo hará.