salir de if y foreach

Resuelto au_stan asked hace 54 años • 4 respuestas

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>
    }
}
au_stan avatar Jan 01 '70 08:01 au_stan
Aceptado

ifno es una estructura de bucle, por lo que no se puede "salir de ella".

Sin embargo, puedes escapar del foreachsimplemente 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.

breaktoma 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 !

Kaii avatar Feb 09 '2012 17:02 Kaii
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á.

Decent Dabbler avatar Feb 09 '2012 17:02 Decent Dabbler

Una forma más segura de abordar la ruptura de un bucle foreacho whileen PHP es anidar una variable de contador incremental y ifun 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;
serraosays avatar Mar 10 '2016 23:03 serraosays