Ciklusok a PHP-ban (for, while, do-while, foreach iterációk + break és continue használata)

Ebben a leckében megtanuljuk, hogy hogyan lehet a kódunk egy részét többször futtatni anélkül, hogy újra és újra begépelnénk azt. Egy adott kódrészlet lefutásának ismétlését ciklusnak vagy iterációnak hívjuk. Több különböző ciklusfajtát különböztetünk meg PHP-ban, ezek a “for”, a “while”, a “do-while” és a “foreach”.

Ciklusok a PHP-ban (for, while, do-while, foreach iterációk + break és continue használata) című cikk borítóképe

Ciklusok a PHP-ban (for, while, do-while, foreach iterációk + break és continue használata)

Ebben a leckében megtanuljuk, hogy hogyan lehet a kódunk egy részét többször futtatni anélkül, hogy újra és újra begépelnénk azt. Egy adott kódrészlet lefutásának ismétlését ciklusnak vagy iterációnak hívjuk. Több különböző ciklusfajtát különböztetünk meg PHP-ban, ezek a “for”, a “while”, a “do-while” és a “foreach”.

A ciklus, iteráció fogalma, magyarázata

A ciklus (vagy iteráció) a programozás egyik alapvető eszköze, amely egy programrészlet ismételt végrehajtásáért felelős. Programozás során gyakran van olyan, hogy egy műveletet többször kell végrehajtanunk – például több felhasználó adatainak bekérése -, ilyenkor nincs szükség arra, hogy a bekérést megvalósító programrészletet annyiszor írjuk le, ahány felhasználó adatát szeretnénk megadni. Ilyen esetekre találták ki a ciklusokat, hiszen elegendő megadnunk, hogy az ismételendő műveleteket hányszor hajtsa végre, és a program annyiszor fogja végrehajtani.

Definiáltuk elméletben a ciklusok fogalmát, most nézzünk egy kicsit mögé a dolgoknak, próbáljuk összerakni a logikát, hogy hogyan is kell egy iterációt megvalósítani.

php ciklus iteracio szemleltetes

Ami biztos az az, hogy minden ciklusnak szüksége van egy feltételre. Ez a feltétel mindig egy eldöntendő kérdés. Például, ha az első 10 számot szeretnénk ciklussal összeadni, akkor a feltétel az lesz, hogy az éppen az összeghez adandó szám kisebb vagy egyenlő-e, mint 10 vagy sem. Az első 10 összeadandó szám közül az első az 1, az első szám esetében megvizsgáljuk, hogy kisebb vagy egyenlő-e, mint 10, a program kiértékeli a választ és ha kisebb vagy egyenlő, mint 10, akkor a ciklusmag irányába indulunk el, ha nem kisebb vagy egyenlő, akkor pedig a hamis ágon. A program ebből tudja, hogy kell-e még ismételni a ciklusmagot vagy sem. Mindaddig amíg a feltételünk vizsgálata igazzal tér vissza, a ciklusmagunk le fog futni. Ebből következik az, hogy az ismétlendő kódrészlet a ciklusmagba fog kerülni. Amint a feltételünk nem teljesül, azaz hamissal tér vissza a program, abban a pillanatban megszakad a ciklus futása és a program megy tovább a másik ágon.

Még megjegyezzük, hogy léteznek elöltesztelős és hátultesztelős ciklusok, a fenti képen látható ciklus egy elöltesztelős ciklus, hiszen előbb tesztelünk, azaz megvizsgáljuk a feltételt, majd csak utána fut le a ciklusmag. A hátultesztelős ciklus esetében először lefut a ciklusmag, majd csak azután teszteljük le, hogy a feltétel teljesült-e vagy sem. A “while” ciklus elöltesztelős, míg a “do…while” hátultesztelős ciklus, de ezekről majd később írunk bővebben.

Ciklusok fajtái

Bár fentebb már lespoilereztük, hogy milyen ciklusfajták léteznek, de azért úgy gondoljuk, hogy érdemes még pár szót szólni róluk, mielőtt belevágnánk egyesével taglalni és megvalósítani őket.

Négy különböző ciklusfajtát különböztetünk meg a PHP-ban:

  • for – meghatározott számú alkalommal iterál
  • foreach – egy tömb összes elemén keresztül iterál
  • while – először leteszteli, hogy a feltétel igaz-e és végrehajtja a ciklusmagot, amíg a feltétel igaz
  • do-while – először végrehajtja egyszer a ciklusmagot, majd utána addig hajtja végre újból, amíg igaz a feltétel

for ciklus

Először vegyük a for ciklust, hiszen talán ezt a legegyszerűbb megérteni, melyet az is igazol, hogy a kezdő programozók által ez a leggyakrabban használt ciklus.

Ahogy fentebb említettük a for ciklus egy olyan ciklus, amelynél tisztában kell lennünk azzal, hogy hányszor kell a ciklusnak megismételnie a ciklusmagot. Ez a tulajdonsága annak köszönhető, hogy három paramétere van, amelyek azért felelősek, hogy számolják hanyadszor fut le a ciklusunk.


Szintaxis:

for (SZÁMLÁLÓ.INICIALIZÁLÁSA; SZÁMLÁLÓ.VIZSGÁLATA; SZÁMLÁLÓ.NÖVELÉSE) {
   CIKLUSMAG
}
Code language: PHP (php)

Ahogy látjuk a szintaxison a for ciklus esetében minden a számláló körül forog. Első paraméterként készítünk egy számlálót, amelynek adunk egy kezdőértéket, másodikként megvizsgáljuk a számlálónkat, ha a vizsgálat eredménye igaz, akkor belépünk a ciklusmagba és futtatjuk a benne található kódrészletet. Ha végeztünk a ciklusmagban található részlettel, akkor a for ciklus növeli a számlálót. Majd indul az egész elölről, ám ilyenkor a számláló kezdőértékét már nem veszi figyelembe, egyből a vizsgálatra ugrik, ahol újból megvizsgálja a feltételt, ha igaz, akkor újból belép a ciklusmagba, majd növeli a számláló értékét. Így megy ez mindaddig, amíg a feltétel nem lesz hamis, ilyenkor a program kilép az egész ciklusból.



Példa for ciklus használatára:

PHP kód

<?php  
	for ($szamlalo = 1; $szamlalo <= 10; $szamlalo++) {
  		echo $szamlalo . "<br>";
	}
?> 
Code language: HTML, XML (xml)

Eredmény

1
2
3
4
5
6
7
8
9
10


A fenti példában a számlálónkat “$szamlalo = 1” utasítással inicializáljuk, majd megadjuk, hogy addig menjen a ciklus, amíg a számlálónk kisebb vagy egyenlő, mint 10. A for ciklusunk utolsó paramétere a számláló növelése. A ciklus belsejében, azaz a ciklusmagban kiíratjuk a számlálót, melyhez hozzáfűzűnk egy sortörést, hogy a számok ne egymás mellett szóköz nélkül jelenjenek meg.

foreach ciklus, iteráció PHP-ban

A foreach ciklust abban az esetben érdemes használnunk, amikor tudjuk, hogy egy tömb összes elemét meg kell vizsgálnunk, de nem tudjuk, hogy a tömb hány elemből áll. (Vagy ha tudjuk, hogy hány elemből áll, de egy asszociatív tömbről van szó.) A foreach iteráció egy tömb összes elemén végigiterál, nem csak a számozott indexűeken, így olyan esetekben is kiváló lehet, amikor egy tömböt nem az alapértelmezett sorrendben töltöttünk fel, hanem olyan helyekre is szúrtunk be elemet, amelyet számmal nem tudunk kifejezni. A foreach azért képes erre, mert a for-ral ellentétben itt nem kell kezdő- és végértéket megadnunk, szimplán csak egy tömböt, amelyen szeretnénk, ha a ciklus végigiterálna.


Szintaktika:

foreach ($TÖMB as $ÉRTÉK) {
  CIKLUSMAG
}
Code language: PHP (php)

A foreach kulcsszó után meg kell adnunk annak a tömbnek a nevét, amelyet szeretnénk teljesmértékben bejárni, majd az “as” kulcsszó után annak a változónak a nevét, amelyben a futó iteráció éppen aktuális elemét szeretnénk tárolni.


Példa foreach használatára PHP nyelvben:

PHP kód

<?php    
    $verziok = array(
    "elso" => 1,
    "masodik" => 2,
    "sokadik" => "sok");
    
    foreach ($verziok as $elem) {
        echo $elem . "<br>";
    }
?>
Code language: HTML, XML (xml)

var_dump($verziok) eredménye

array(3) {
  ["elso"]=> int(1)
  ["masodik"]=> int(2)
  ["sokadik"]=> string(3) "sok"
}
Code language: PHP (php)

>> Megjegyzés: A var_dump-ról itt olvashatsz bővebben. <<

Eredmény

1
2
sok


A tömb ábrázolásánál láthatjuk, hogy a tömbnek nincs nulladik, első vagy második, sőt semmilyen számmal leírható indexe. Jelen esetben a tömbben alkalmazott indexek az: “elso”, a “masodik” és a “sokadik”. Ezeket a tömbindexeket nagyon nehéz lenne más ciklusokkal bejárni, de a foreach számára ez egyáltalán nem akadály.

while ciklus a PHP-ban

A while ciklus, ahogy már említettük egy elöltesztelős ciklus, azaz először megvizsgáljuk, hogy a feltétel igaz-e vagy sem és amennyiben igaz, akkor belépünk a ciklusmagba. Amennyiben hamis eredményt kapunk a feltételvizsgálat során, akkor a program nem lép be a ciklusmagba. A while ciklus mindaddig ismétli a ciklusmagban található utasításokat, amíg a feltétel vizsgálata igaz eredménnyel tér vissza.


Szintaktika:

while (FELTÉTEL) {
   CIKLUSMAG
}
Code language: PHP (php)

A while ciklus után kell megadnunk a feltételt. Ha nem egy konkrét feltételt adunk meg, hanem csak egy változót írunk a feltétel helyére, akkor a program azt fogja vizsgálni, hogy az a változó igaz-e. Szóval egy boolean típusú változó esetében nem kell beírnunk azt a feltételt, hogy “VALTOZO == true”, elegendő ennyit írnunk: “VALTOZO”. Ilyenkor a program azt fogja vizsgálni, hogy a “VALTOZO” nevű változó igaz-e.

Fontos megjegyezni, hogy a while ciklusnál nincs számlálónk, így a létrehozásáról és növeléséről nekünk kell gondoskodnunk. Nem kell megijedni, a valóságban ez annyit tesz, hogy létrehozunk egy változót még a while ciklus előtt, amelynek adunk egy kezdőértéket neki. A ciklusmagban pedig mindig eggyel növeljük ennek a változónak az értékét.


Példa while ciklus használatára:

PHP kód

 <?php    
    $szamok = array(2, 5, 7, 4, 9, 10);
    $szamlalo = 0;
    
    while ($szamlalo < 6) {
        echo $szamok[$szamlalo] . "<br>";
        $szamlalo++;
    }
?>
Code language: HTML, XML (xml)

Eredmény

2
5
7
4
9
10


A fenti példában van egy tömbünk, amelyben számok szerepelnek, majd létrehoztuk a számlálót, amelynek a kezdőértéke nulla, hiszen a PHP-ban alapvetően nulla sorszámmal kezdődnek a tömbben lévő elemek indexei. Ezután megírjuk a while ciklus feltételét, amelyben azt vizsgáljuk, hogy a számlálónk elérte-e már a hatot. (Azért hatot, mert hat elemünk van.) Ha nem érte még el a hatot, akkor belépünk a ciklusmagba, ahol kiíratjuk a tömb számláló indexű elemét egy sortöréssel, majd növeljük eggyel a számláló értékét. A növelés rövid formája a változóneve, majd két plusz jel. ($szamlalo++) Ezt követően addig ismétlődik ez a művelet, amíg a feltétel hamis nem lesz.

do-while ciklus használata a PHP-ban

Ha nagyon egyszerűen akarnánk fogalmazni, akkor azt mondhatnánk, hogy a do-while ciklus a sima while ciklus megfordítva. Miért? Mert a while ciklus esetében a tesztelés, feltételvizsgálat a ciklusmag lefutása előtt kerül kiértékelésre, míg a do-while ciklus esetében pont fordítva történik minden. Azaz először lefuttatjuk a ciklusmagot, majd csak ezután vizsgáljuk meg és értékeljük ki a feltétel teljesülését.

Ebből adódik a két while ciklus közötti legnagyobb különbség, mely szerint a do-while ciklus mindenképp le fog futni egyszer. Még akkor is, ha a feltétel hamis, hiszen először futtatjuk a ciklusmagot, majd csak azután történik meg a vizsgálat. Ha az első vizsgálat hamis eredményt ad vissza, akkor a ciklusmag csak egyszer fut le, hiszen az első vizsgálat után a program kilép a ciklusból.

Viszont van valami, amiben megegyezik a do-while iteráció a while ciklussal. Ez az egyezőség pedig nem más, mint, hogy a do-while ciklus esetében is nekünk kell gondoskodnunk a számláló inicializálásáról és léptetéséről.


Szintaxis:

do {
  CIKLUSMAG
} while (FELTÉTEL);
Code language: PHP (php)

A szintaxis csak annyiban módosult az előző while cikluséhoz képest, hogy a “while” rész elé bejön egy “do” rész, amely a ciklusmagot fogja tartalmazni.

Figyelmeztetés: A feltételt lezáró zárójel után pontosvesszőt kell rakni!


Példa do-while ciklus használatára:

PHP kód

 <?php    
    $szamok = array(2, 5, 7, 4, 9, 10);
    $szamlalo = 0;
    
    do {
        echo $szamok[$szamlalo] . "<br>";
        $szamlalo++;
    }
    while ($szamlalo < 6);
?>
Code language: HTML, XML (xml)

Eredmény

2
5
7
4
9
10


break utasítás a PHP-ban

A PHP-ban van egy break névre keresztelt utasításunk is, amely pontosan azt csinálja, amit a neve is sugall, azaz megtöri, megszakítja a ciklus futását, akkor amikor meghívjuk.


Szintaktika:

break;
Code language: PHP (php)


Példa break használatára:

PHP kód

<?php    
    $szamok = array(2, 5, 7, 4, 9, 10);
        
    foreach ($szamok as $elem){
      if ($elem == 7) {
        break;
      }

      else echo $elem . "<br>";
    }
?>
Code language: HTML, XML (xml)

Eredmény

2
5

A fenti példánkban a ciklusmagban csinálunk egy feltételvizsgálatot, amelynél megvizsgáljuk az “$elem” változót, ez tárolja a tömb aktuális elemét. Ha az aktuális elem pontosan 7, akkor a break utasítással megszakítjuk az egész ciklus futását. Szóval a tömbben található többi értéket, a 4-et, a 9-et és a 10-et már nem fogjuk megvizsgálni, hiszen nem jut el addig a ciklus. Amennyiben nem 7, akkor szimplán kiíratjuk az aktuális elem értékét.

PHP continue utasítás magyarul

A PHP continue utasítása nagyon hasonlóan működik a PHP break utasításához, csak ebben az esetben nem az egész ciklusból lépünk ki, hanem csak a jelenlegi iterációból. A jelenlegi ismétlést átugorjuk és a következővel folytatjuk.


Szintaktika:

continue;
Code language: PHP (php)


Példa continue használatára:

PHP kód

<?php    
    $szamok = array(2, 5, 7, 4, 9, 10);
        
    foreach ($szamok as $elem){
      if ($elem == 7) {
        continue;
      }
      echo $elem . "<br>";
    }
?>
Code language: HTML, XML (xml)

Eredmény

2
5
4
9
10


A fenti példán csak annyit módosítottunk, hogy lecseréltük a “break” utasítást “continue”-ra. Láthatjuk, hogy ebben az esetben nem szakadt meg az egész ciklus futása, csak az éppen aktuális iteráció, ismétlés lett átugorva.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!