PHP: break-, continue- en goto-instructies. Loops in PHP

Het is vaak handig om een ​​lus vroegtijdig te kunnen beëindigen wanneer zich bepaalde omstandigheden voordoen. De pauzeoperator biedt deze mogelijkheid. Het werkt met constructies als: while, do while, for, foreach of switch.

De break-instructie kan een optioneel numeriek argument bevatten dat aangeeft hoeveel geneste structuren moeten worden beëindigd. De standaardwaarde van het numerieke argument is 1, waarmee de huidige lus wordt beëindigd. Als een switch-instructie in een lus wordt gebruikt, verlaat break/break 1 alleen de switch-constructie.

\n"; break 1; /* Sluit alleen de switch-constructie af. */ case 10: echo "Iteratie 10; laten we uitgaan
\n"; break 2; /* Verlaat de switch-constructie en uit terwijl lus. */ ) ) // nog een voorbeeld voor ($bar1 = -4; $bar1< 7; $bar1++) { // проверка деления на ноль if ($bar1 == 0) { echo "Выполнение остановлено: деление на ноль невозможно."; break; } echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Natuurlijk zou je er soms de voorkeur aan geven om eenvoudigweg één van de iteraties van de lus over te slaan in plaats van de lus te voltooien, in welk geval dit wordt gedaan met behulp van de continue-instructie.

doorgaan

Om de verwerking van het huidige codeblok in de hoofdtekst van de lus te stoppen en door te gaan naar de volgende iteratie, kunt u de instructie continue gebruiken. Van pauze-operator het verschil is dat het de lus niet stopt, maar gewoon naar de volgende iteratie gaat.

Ga door met exploitant net zoals break een optioneel numeriek argument kan aannemen, dat specificeert op hoeveel niveaus van geneste lussen de rest van de iteratie zal worden overgeslagen. De standaardwaarde van het numerieke argument is 1, waarbij alleen de rest van de huidige lus wordt overgeslagen.

"; ga verder; ) echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Houd er rekening mee dat terwijl de lus liep, de nulwaarde van de variabele $counter werd overgeslagen, maar de lus doorging met de volgende waarde.

ga naar

goto is een onvoorwaardelijke sprongoperator. Het wordt gebruikt om naar een ander gedeelte van de programmacode te springen. De plaats waar u in het programma naartoe moet, wordt aangegeven met een label (eenvoudige identificatie), gevolgd door een dubbele punt. Om verder te gaan, wordt het gewenste label na de goto-instructie geplaatst.

Een eenvoudig voorbeeld van het gebruik van de goto-instructie:

De goto-instructie heeft enkele beperkingen op het gebruik ervan. Het doellabel moet zich in hetzelfde bestand en in dezelfde context bevinden, wat betekent dat u niet buiten de grenzen van een functie of methode kunt springen, en niet binnen een ervan. Je kunt ook niet in een lus of schakel verklaring. Maar het kan worden gebruikt om aan deze constructies (van lussen en switch-instructies) te ontsnappen. Meestal wordt de goto-instructie gebruikt in plaats van break-instructies met meerdere niveaus.

"; ) echo "na de lus - vóór de markering"; // de instructie wordt niet uitgevoerd end: echo "Na de markering"; ?>

verklaring breken

Het is vaak handig om een ​​lus vroegtijdig te kunnen beëindigen wanneer zich bepaalde omstandigheden voordoen. De pauzeoperator biedt deze mogelijkheid. Het werkt met constructies zoals: while, do while, for, foreach of switch.

De break-instructie kan een optioneel numeriek argument bevatten dat aangeeft hoeveel geneste structuren moeten worden beëindigd. De standaardwaarde van het numerieke argument is 1, waarmee de huidige lus wordt beëindigd. Als een switch-instructie in een lus wordt gebruikt, verlaat break/break 1 alleen de switch-constructie.

\n"; break 1; /* Sluit alleen de switch-constructie af. */ case 10: echo "Iteratie 10; laten we uitgaan
\n"; break 2; /* Verlaat de switch-constructie en de while-lus. */ ) ) // nog een voorbeeld voor ($bar1 = -4; $bar1< 7; $bar1++) { // проверка деления на ноль if ($bar1 == 0) { echo "Выполнение остановлено: деление на ноль невозможно."; break; } echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Natuurlijk zou je er soms de voorkeur aan geven om eenvoudigweg één van de lus-iteraties over te slaan in plaats van de lus te voltooien, in welk geval dit wordt gedaan met behulp van de continue-instructie.

Ga door met exploitant

Om de verwerking van het huidige codeblok in de hoofdtekst van de lus te stoppen en door te gaan naar de volgende iteratie, kunt u de instructie continue gebruiken. Het verschilt van de break-operator doordat deze de lus niet stopt, maar eenvoudigweg naar de volgende iteratie gaat.

De continue-operator kan, net als break, een optioneel numeriek argument gebruiken, dat aangeeft op hoeveel niveaus van geneste lussen de rest van de iteratie zal worden overgeslagen. De standaardwaarde van het numerieke argument is 1, waarbij alleen de rest van de huidige lus wordt overgeslagen.

"; ga verder; ) echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Houd er rekening mee dat terwijl de lus liep, de nulwaarde van de variabele $counter werd overgeslagen, maar de lus bleef werken vanaf de volgende waarde.

ga naar verklaring

goto is een onvoorwaardelijke sprongoperator. Het wordt gebruikt om naar een ander gedeelte van de programmacode te springen. De plaats waar u in het programma naartoe moet, wordt aangegeven met een label (eenvoudige identificatie), gevolgd door een dubbele punt. Om verder te gaan, wordt het gewenste label na de goto-instructie geplaatst.

Een eenvoudig voorbeeld van het gebruik van de goto-instructie:

De goto-instructie heeft enkele beperkingen op het gebruik ervan. Het doellabel moet zich in hetzelfde bestand en in dezelfde context bevinden, wat betekent dat u niet buiten de grenzen van een functie of methode kunt springen, en niet binnen een ervan. Je kunt ook niet in een lus of switch-instructie springen. Maar het kan worden gebruikt om aan deze constructies (van lussen en switch-instructies) te ontsnappen. Meestal wordt de goto-instructie gebruikt in plaats van onderbrekingen op meerdere niveaus.

"; ) echo "na de lus - vóór de markering"; // de instructie wordt niet uitgevoerd end: echo "Na de markering"; ?>

De for-lus is een van de meest gebruikte lussen in elke programmeertaal. In dit artikel gaan we dieper in op de PHP for-lus.

Voor lusoperator in PHP

Een for-lus in PHP voert een codeblok uit een bepaald bedrag keer op basis van teller. In dit geval wordt het aantal keren dat een codeblok moet worden uitgevoerd vooraf bepaald voordat het in de body van de lus terechtkomt.

want is een van de meest complexe typen cyclus. In PHP gedraagt ​​een for-lus zich op dezelfde manier als C. Hieronder vindt u de syntaxisstructuur:

for(expressie1;expressie2;expressie3) instructie;

In de bovenstaande beschrijving trefwoord for geeft een lus aan. De haakjes definiëren de uitdrukkingen en vervolgens de uit te voeren instructie.

Hoe werkt een for-lus in PHP?

Om te begrijpen hoe de for-lus werkt, moeten we deze drie uitdrukkingen begrijpen. Expressie: expressison1 is de eerste, die slechts één keer wordt uitgevoerd voordat deze in de lus terechtkomt. Het wordt onvoorwaardelijk uitgevoerd. Dit betekent dat de expressie de eerste keer wordt uitgevoerd voordat deze in de lus terechtkomt.

Expressison1 wordt de initialisatie-expressie genoemd omdat deze wordt gebruikt om de teller te initialiseren die wordt gebruikt in expression2 en expression3 .

Expressie2 ( conditie controle) wordt gecontroleerd om te bepalen of de voorwaarde toestaat dat de instructie wordt uitgevoerd of niet. De eerste keer wordt het na expression1 uitgevoerd en vervolgens voordat het in de lus terechtkomt.

Express2 bevat doorgaans voorwaardelijke operator om te controleren of de voorwaarde waar of onwaar retourneert. Als de voorwaarde waar retourneert, wordt de instructie die in de lus is geschreven, uitgevoerd.

Expression3 wordt uitgevoerd aan het einde van elke iteratie na de lusinstructie. Programmeurs noemen dit doorgaans een increment-expressie. Ze gebruiken deze expressie om een ​​teller te verhogen die is geïnitialiseerd in expression1 en geëvalueerd in expression2 .

Alle drie de uitdrukkingen zijn optioneel. Je kunt ook een PHP-loop maken zoals hieronder:

for(;;) verklaring;

for(;expressie2;expressie3) instructie;

Als we meerdere regels in een for-lus hebben, gebruik dan beugel zoals hieronder:

for(expressie1;expressie2;expressie3)( statement1; statement2; statement3; )

Voor lusstroomdiagram

In de eerste stap wordt expression1 uitgevoerd. Als je goed naar het blokdiagram kijkt, zul je merken dat er geen voorwaarde is voor expressie1. expression1 is vergelijkbaar met de stroom van het programma dat wordt uitgevoerd.

De volgende stap voert expression2 onmiddellijk na expression1 uit. Er wordt gecontroleerd of de lusvoorwaarde waar is. Als de voorwaarde waar is, zal de lus doorgaan met uitvoeren, anders verlaat de thread de lus.

Als expression2 true retourneert, voert de derde stap de instructie uit die in de for-lus is geschreven. Hierna wordt de derde expressie expression3 uitgevoerd.

Nadat expression3 is uitgevoerd, controleert de thread expression2 opnieuw, en de lus gaat door totdat expression2 false retourneert.

Een eenvoudig voorbeeld van een for-lus in PHP

Laten we eens kijken naar het geval waarin u getallen van 1 tot en met 10 moet weergeven, gescheiden door komma's. Hieronder staat de code:

voor($i=1;$i<=10;$i++) print $i.",";

Of met een accolade:

voor($i=1;$i<=10;$i++) { print $i.","; }

De expressie $i=1 is expression1 , die onvoorwaardelijk wordt uitgevoerd. We gebruiken expression1 om de variabele te initialiseren op $i=1 .

Expressie2 is de expressie $i :

$i=1; voor(;$i<=10;$i++) { print $i.","; }

$i=1; voor(;$i<=10;) { print $i.","; $i++; }

Complexe expressie in een for-lus

U kunt drie expressies in een for-lus schrijven. We kunnen meerdere instructies in elke expressie schrijven in een for-lus. Operatoren moeten worden gescheiden door komma's.

Laten we eens kijken naar het voorbeeld van de vorige code om een ​​getal van 1 tot 10 af te drukken. Door meerdere operatoren in een expressie te gebruiken, kunt u de onderstaande code schrijven:

voor($i=1; $i<=10; print $i . ",", $i++);

Hier is expression3 print $i.’,’, $i++ , wat twee operatoren combineert, één is print $i. ‘,’ en de tweede is $ i++ .

Hierboven ziet u een voorbeeld waarin we meerdere operatoren hebben gebruikt in expression3 . Maar u kunt ook meerdere operatoren in elke expressie gebruiken. Bijvoorbeeld:

Op dezelfde manier kunt u alle oneven getallen kleiner dan 10 afdrukken met behulp van de volgende code:

Array en for-lus in PHP

PHP gebruiken voor lus je kunt door een array itereren. We hebben bijvoorbeeld een array die de namen van verschillende mensen bevat. We moeten alle namen weergeven:

$names = array("Ankur", "Jan", "Vreugde"); $count = aantal($names); for($teller=0;$teller<$count;$counter++){ print $names[$counter]; }

Je kunt ook gebruiken multidimensionale array in een for-lus:

$names = array(array("id" => 1, "name" => "Ankur"), array("id" => 2, "name" => "Joe"), array("id" => 3, "naam" => "Jan"),); $count = aantal($names); voor ($teller = 0; $teller< $count; $counter++) { print "Name".$names[$counter]["name"]." ID".$names[$counter]["id"]."n"; }

Genest voor lus

Het is mogelijk om een ​​geneste for-lus in PHP te gebruiken. Voorbeeld:

$metrix = array(array(1, 2, 3), array(2, 1, 3), array(3, 2, 1),); $aantal = aantal($metrix); voor ($teller = 0; $teller< $count; $counter++) { $c_count = count($metrix[$counter]); for ($child = 0; $child < $c_count; $child++) { echo $metrix[$counter][$child]; } }

We hebben een multidimensionale array en we gebruiken twee PHP for-lussen om de waarden van de elementen weer te geven.

Wanneer u een geneste lus gebruikt, kunt u de ouder-for-lus-expressie in de onderliggende lus gebruiken. Bijvoorbeeld:

voor ($i = 1; $i<= 5; $i++) { for ($j = 1; $j <= $i; $j++) { echo "*"; } echo "
"; }

Het bovenstaande programma is een van de meest populaire programma's om het *-symbool in de vorm van een rechthoekige driehoek af te drukken.

Verhogen in een for-lus

In bijna elk van de bovenstaande voorbeelden hebben we expression3 gebruikt, wat de laatste expressie is, als de increment-instructie. We hebben in alle voorbeelden de waarde ook vaak met één verhoogd, bijvoorbeeld $i++ of $j++ enzovoort. Maar we kunnen de teller verhogen volgens onze vereisten. Als u bijvoorbeeld alle oneven getallen van 1 tot en met 15 wilt afdrukken, kunt u de lus initialiseren met de waarde 1 en doorlopen tot en met 15, waarbij u de teller met 2 verhoogt:

for($teller = 1; $teller<=15;$counter=$counter+2){ print $counter.","; }

De uitvoer van de bovenstaande code zal zijn " 1,3,5,7,9,11,13,15 " Hier verhogen we de countervariabele met +2 met behulp van de uitdrukking $counter=$counter+2 .

De for-lus verlaten

Je kunt een lus onder een bepaalde voorwaarde verbreken met behulp van het trefwoord break. Het maakt geen deel uit van een lus en wordt gebruikt om de uitvoering van for , foreach , while , do-while en switch-instructies te onderbreken. Laten we eens kijken hoe het trefwoord break een for-lus stopt.

Een eenvoudig voorbeeld waarbij we alle getallen in een array tot 100 afdrukken:

$serie = array(1, 8, 5, 3, 100, 9, 7); voor ($i = 0, $count = count($serie); $i<= $count; $i++) { if (100 == $series[$i]) { break; } echo $series[$i] . " "; }

Hier verbreken we de lus door te controleren of de waarde van het array-element gelijk is aan 100.

Je kunt ook een geneste PHP-lus door een array doorbreken door de diepte door te geven, bijvoorbeeld break 1 , break 2 enzovoort. Zie het onderstaande voorbeeld:

for ($i = 0;; $i++) ( switch ($i) ( case 1: echo "Dit is één"; break 1; //Hiermee wordt alleen de switch-instructie verbroken case 2: echo "Dit is twee"; break 1 ; // Dit zal alleen de switch-instructie verbreken case 3: echo "This is three" break 2 // Dit zal zowel de switch als de for-lus verbreken)

Hier verbreekt break 1 de switch-instructie, maar break 2 verbreekt zowel de huidige instructie als de ouder, dat wil zeggen zowel de switch als de for .

Doorgaan in een for-lus gebruiken

In het vorige gedeelte hebben we geleerd hoe we uit een lus kunnen komen. Maar wat als u één iteratie van de lus moet overslaan en terug moet gaan naar de lus? PHP heeft hiervoor het trefwoord continue.

Laten we ons een voorbeeld herinneren van het uitvoeren van oneven getallen. Het enige wat we deden was de lus op 1 starten, de teller met 2 verhogen en het resultaat afdrukken. Laten we dit voorbeeld implementeren met behulp van continue :

voor ($i = 0; $i< 20; $i++) { if ($i % 2 == 0) { continue; } echo $i . ","; }

In het bovenstaande voorbeeld controleren we de uitdrukking $i%2 == 0 en als deze waar is, slaan we met behulp van het trefwoord continue de rest van de lus over en keren we terug naar expressie3 ($i++) en vervolgens naar expressie2 ($i:

Soms moet u gegevens van een databasetabel naar een array overbrengen met behulp van PHP:

10001, "name" => "Ankur", "country" => "India"), array("id" => 20002, "name" => "Vreugde", "country" => "VS"), array ("id" => 10003, "name" => "John", "country" => "VK"), array("id" => 20001, "name" => "Steve", "country" => "Frankrijk"),); ?>

" . "" . "" . "" . ""; } ?>
Identiteitskaart Naam Land
" . $table_data[$i]["id"] . "" . $table_data[$i]["naam"] . "" . $table_data[$i]["land"] . "

De bovenstaande code genereert de tabel.

Loop-instructies worden heel vaak in elke programmeertaal gebruikt. Bijna alle problemen maken gebruik van lussen, dus het is de moeite waard om speciale aandacht te besteden aan het leren ervan. Er zijn 4 soorten lussen in PHP:

  • while (voorvoegsel conditiecontrole);
  • do..while (conditiecontrole na de perfix);
  • voor ;
  • voorelkaar;

De eerste drie lussen zijn vergelijkbaar met standaardlussen uit programmeertalen (C++, Pascal), en de laatste (foreach) is vergelijkbaar met Perl. Laten we de eerste drie lusoperatoren afzonderlijk bekijken, en de laatste zal in een aparte les worden behandeld. Merk op dat elk van de lussen geneste lussen toestaat, dat wil zeggen een lus binnen een lus.

While-lusinstructie in PHP

Een vrij eenvoudige lusoperator waarvan de syntaxis sterk lijkt op die in andere programmeertalen.

Terwijl syntaxis in PHP:

//er kan sprake zijn van een complexe logische voorwaarde( exploitanten; ) ?>

De voorwaarde bevat een expressie die waar (waar) of onwaar (onwaar) moet zijn. Als de voorwaarde waar is, worden de uitspraken tussen accolades uitgevoerd. Waarna de voorwaarde opnieuw op waarheid wordt gecontroleerd. Als de voorwaarde onwaar is, komt het programma niet in de lus. Bij een enkele uitspraak kunnen de accolades worden weggelaten.

Opmerking: de voorwaarde kan uit heel veel uitdrukkingen bestaan ​​met behulp van de algebra van de logica &&, ||, ! enz.

Het is de moeite waard om aandacht te besteden aan het feit dat als er operators in de voorwaarde zijn, deze op de een of andere manier moeten worden gewijzigd, anders zal de lus eenvoudigweg in cycli verlopen.

Hier is een eenvoudig voorbeeld van het gebruik van while:

"; $i++; ) ?>

Het bovenstaande voorbeeld levert de volgende uitvoer op:

ik = 0
ik = 1
ik=2
ik = 3
ik=4

Houd er rekening mee dat $i=5 niet wordt afgedrukt omdat i neemt helemaal toe aan het einde van de lus en daarom zal, zodra deze 5 bereikt, eenvoudigweg niet aan de voorwaarde voor deelname aan de lus worden voldaan.

break-instructie in PHP

Er is een speciale break-instructie om de lus onmiddellijk te beëindigen. Deze operator wordt vaak gebruikt om een ​​oneindige lus te verlaten wanneer de voorwaarde altijd waar is. Het hierboven beschreven voorbeeld zou bijvoorbeeld als volgt kunnen worden geschreven:

//voorwaarde is altijd waar( echo "i =".$i."
"; $i++; if($i>=5) break; ) ?>

Het resultaat zal hetzelfde zijn als in het vorige voorbeeld.

De continue-instructie in PHP

Operator gaat door;

//voorwaarde is altijd waar( echo "i =".$i."
beëindigt de huidige iteratie van de lus door naar het begin te gaan, maar beëindigt de lus niet volledig. Bijvoorbeeld:

"; $i++; if($i>=5) break; else continue; ) ?>

Het resultaat van dit voorbeeld zal hetzelfde zijn als de voorgaande voorbeelden.

Zoals de praktijk laat zien, gaan operators door;

"; } en breken; helpen vaak bij het implementeren van complexe cycli.
"; } ?>

Laat me je nog een voorbeeld geven van het gebruik van de while-lus:

//de resultaten van deze twee whiles zullen verschillend zijn //vanwege de post-prefix en de prefix-vorm

$i=0; while (++$i //voorvoegselvorm ( echo "i =".$i."

De do...while-lusinstructie in PHP

De do...while-instructie lijkt sterk op een reguliere while-instructie. Het enige verschil is de tijd die nodig is om de toestand te controleren. De do...while-lus wordt minstens één keer uitgevoerd, omdat de controle helemaal aan het einde plaatsvindt. De do...while-syntaxis is:

Laten we eens kijken naar een voorbeeld:

Voor lusoperator in PHP

"; $i++; ) while($i

Het resultaat is vergelijkbaar met de eerste beschouwde voorbeelden.

"; } ?>

Het is vermeldenswaard dat de exploitanten doorgaan;

en breken;

kan ook in dergelijke cycli worden gebruikt.

De syntaxis van de for-instructie is als volgt: Bij het starten vindt de initiële initialisatie van variabelen plaats. usloviya moet een of meer lusbeëindigingsvoorwaarden bevatten. De shag bevat instructies die aan het einde van elke iteratie worden uitgevoerd. Bijvoorbeeld:

Het resultaat van deze lus zal hetzelfde zijn als de vorige voorbeelden.

Het grote voordeel van het gebruik van for is dat het luslichaam mogelijk ontbreekt en dat alle noodzakelijke bewerkingen in het shag-gedeelte worden uitgevoerd. Voor de duidelijkheid, hier is een voorbeeld:

", $i++); ?>

Opmerking

: De echofunctie is niet toegestaan ​​in shag.




Tenslotte is hier een voorbeeld van twee equivalente lusconstructies, maar de ene is voor en de andere voor terwijl