Az alapoktól...

PHP kezdőknek

PHP kezdőknek

9. lecke - Vezérlő szerkezetek - while, do .. while ciklusok

2015. július 14. - Frantique

A ciklusok, amint a nevük is mutatja, valamilyen kritérium alapú ismétlődő folyamatokat jelentenek. Szintén a valós életből vett példából kiindulva szemléltetjük a működésüket. Képzeljük el, hogy épp levest ebédelünk. Mi történik az agyunkban? A kezünk azt az utasítást kapja, hogy amíg van leves a tányérban, kanalazzunk. Ez is egy ciklus: a mozdulat ugyanaz, és addig ismétlődik, amíg az adott feltétel fennáll.

A PHP-ban a legegyszerűbb ciklus a while, a szerkezete: 

while (feltétel) {
        következmény;
}

Egy fontos dologra oda kell figyelni: a ciklus addig ismétlődik, amíg a feltétel IGAZ. A tesztelés az elején történik, vagyis ha a feltétel HAMIS értékkel indul, a ciklus belsejében levő kód sose fut le.

 Bármennyire egyszerű a ciklus szerkezete, hatalmas csapdalehetőség is egyben. Képzeljük el, mi történik, ha a feltétel értéke sose változik, és mindig IGAZ lesz. A ciklus sose ér véget, mivel az alapfeltétel az, hogy addig kell ismételni, amíg a feltétel HAMIS nem lesz. Ezt hívjuk végtelen ciklusnak. Mivel folyton ismétlődik, számtalan bajt okozhat abban az esetben, ha semmiféle megszakítás nincs a ciklusban: processzor túlterheléstől kezdve memória elfogyásán keresztül a háttértár kimerítéséig.  Ezért minden esetben járjunk el körültekintően a ciklusok létrehozásakor!

--------------------

<?php
$szam = 0;
while ($szam <= 10) {        
// Amíg a $szam kisebb vagy egyenlő 10-zel,
        echo
$szam++  . ' '; // eggyel növeli a $szam értékét, hozzáfűz egy szóközt és kiírja azt.
}
?>

--------------------

A fenti példa kiírja a természetes számokat 0-tól 10-ig. Amint látjuk, a feltétel addig IGAZ marad, amíg a $szam változó értéke el nem éri a 11-et, ami már nagyobb, mint a feltételben szereplő 10. Ekkor feltétel kiértékelése HAMIS lesz, és a ciklus véget ér.

Előfordulnak olyan esetek, amikor a feltétel kiértékelésétől függetlenül legalább egyszer le kell futnia a ciklusnak. Mivel nem tudjuk garantálni, hogy a feltétel IGAZ, vagy HAMIS értékkel indul, így a fenti while szerkezetet nem használhatjuk. Ebben az esetben a do .. while a megoldás. A do .. while ciklus a végén teszteli a feltételt, és amennyiben a kiértékelése IGAZ, újra lefut. Ez garantálja a minimum egyszeri futást. A szerkezete így néz ki:

do {
        következmény;
} while (feltétel);

Az alábbi példa szemlélteti a működést:

--------------------

<?php
$szam = 0; 
do {
        echo
$szam;     // Kiírja: 0
} while ( $szam > 0 );  
// A feltétel azonnal HAMIS!
?>

 

--------------------

Kitörés a ciklusból

Előfordulhat olyan eset, hogy nem várhatjuk meg a feltétel kiértékelését, hanem a cikluson belüli változás azonnali kilépést követel. Ilyenkor a break; kulcsszóval tudjuk azonnal befejezni a ciklust:

--------------------

<?php
$szam = 0;
while ( $szam <= 10 ) {
        echo $szam++ . ' ';
        if ($szam === 5) {
                break;    

        }
}
?>

--------------------

Ciklus a ciklusban

Az alábbi példa az egymásba ágyazott ciklusok működését mutatja be:

--------------------


$szam = 1;
$masik_szam = 1;
$betu = 'a';



        while ($masik_szam <= 10) { // Belső ciklus fut
                $masik_szam++;
                echo $betu++; // Stringet növelünk!
        }
       $masik_szam = 1; // Visszaállunk alapértékre...
       $betu = 'a';
       echo "\n";       // Új sor karakter

}
?>

--------------------

A példakód az angol ábécé első 10 betűjét írja ki 10 sorszámozott sorban: 

1:abcdefghij
2:abcdefghij
3:abcdefghij
4:abcdefghij
5:abcdefghij
6:abcdefghij
7:abcdefghij
8:abcdefghij
9:abcdefghij
10:abcdefghij

Megjegyzés
Az egymásba ágyazott ciklusok száma nincs korlátozva. Tervezésnél azonban tartsuk szem előtt a ciklusok mennyiségét: az egymásba ágyazott ciklusoknál az egyes mélységek számának szorzata lesz a véglegesen lefutott körök száma. Jelen példában: 10 x 10 = 100 ismétlődés történt: még egy szint közbeiktatásakor viszont már 1000 lenne! 

-----------------------------------------------------------------------------------------------------

Feladatok

1. Írjuk le a természetes számokat 100 és 80 között, csökkenő sorrendben!

2. Írjuk le a nevünket százszor!

3. Írjuk le az angol ábécét az "f" betűig! A feladat megoldásához használjuk a break; utasítást!

A bejegyzés trackback címe:

https://php-kezdoknek.blog.hu/api/trackback/id/tr817627164

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása