...:::Programozz kedvedre!:::...
Menü
 
HTML
 
PHP
 
Ciklusok

Gyakran adódik olyan feladat, amikor egy utasítássort kell sokszor ismételni. Ilyenkor az helyett, hogy 'n'-szer leírnánk az utasítássort, úgy írjuk meg, hogy önmagát ismételje, amíg szükséges. Ezeket az önmagába visszatérő utasításokat nevezzük ciklusoknak.
Szükség van ciklusokra, ha végig akarunk futtatni valamit, akár egy file-t olvasunk végig vagy számlálunk, de rengeteg egyéb dologra hasznosak.
A PHP többféle ciklust támogat - ezekkel fogunk most megismerkedni.

A legegyszerűbb: a while ciklus

A while ciklusok a PHP legegyszerűbb ciklusai. Éppen úgy viselkednek, mint a C nyelvbeli megfelelőik. A while általános szintaxisa:

while (feltétel)   // addig fut, míg a feltétel igaz
   {
   utasítások;
   }
?>

A ciklus minden lefutása előtt megvizsgálja a feltételt, addig fut amíg a feltétel igaz. Amint a feltétel hamis lesz, a ciklus ismétlődése megszakad. Mivel a feltétel a ciklus kezdetekor értékelődik ki, még ha az utasításblokk belsejében hamissá is válik a feltétel, a blokk végrehajtása akkor sem áll meg.
Ha a while ciklusban több utasítást is kiadunk, használjunk kapcsos zárójeleket.

while ( $szamlalo < 10 )   // itt adjuk a feltételt
   {
   print ($szamlalo ."
"); // ezt a blokkot hajtja végre többször is $szamlalo++; } ?>

Hogyan működik?
Adtunk egy kezdeti értéket a $szamlalo változónak, a ciklus lefutásának feltétele, hogy a $szamlalo 10-nél kisebb legyen. Mivel a ciklusban a $szamlalo értékét mindig eggyel növeljük, a 9. lefutáskor a feltételünk már nem teljesül - a ciklus leáll és a program továbblép a következő kódrészre.

A példát megnézheted működés közben is itt (8/1 demo).

Figyelem:
Ciklusoknál írásánál mindig ügyeljünk arra, hogy biztosítva legyen annak leállása, különben könnyen válhat végtelen ciklussá. Ilyenkor a kód végrehajtása megáll ennél a résznél, addig ismétli, amíg a PHP időtúllépés miatt hibaüzenettel leáll.
Íme egy példa végtelen ciklusra - csak nézzük meg, miről van szó, de ezt nem kell kipróbálni:

// HIBÁS KÓD, végtelen ciklust eredményez
while ( $szamlalo < 10 )
   {
   print ($szamlalo ."
"); } ?>

Ugye, csak egy kifejezés maradt ki, és ott a baj... ;-)

fel...

Ugyenez fordítva: do while

Előfordulhat, hogy a ciklusba zárt utasításnak egyszer mindenképpen le kell futnia - akkor is, ha a feltétel mindig hamis. Ilyenkor használjuk a hátultesztelő do .. while ciklust, ahol a feltétel teljesülését a ciklus végén vizsgáljuk. Az első lefutásnak tehát a hamis feltétel sem akadálya.
Így néz ki:

do
   {
   utasítások;
   }
while (feltétel);
?>

Figyelem:
A do while ciklusnál a feltétel után ki kell tenni a sorvégi ; pontosvesszőt.

fel...

A sokoldalú: a for ciklus

A következő a for ciklus. Bár ez semmivel nem ad többet mint az elől vagy hátultesztelő while ciklus, de mivel rugalmasan beállítható, elterjedten használják.

Meghatározunk benne egy változót, adunk egy feltételt, amíg a ciklus ismétlődik, végül minden lefutáskor növeljük, esetleg csökkentjük eggyel.
Változóként hagyományosan a $i nevű változót szokás használni erre a célra.

for ( változó meghatározása; feltétel; változó növelése)
   {
   utasítások;
   }

?>

Mint látjuk, a for ciklusnak numerikus feltételt adhatunk - azaz a változó egy szám, amit aztán lehet lefutásonként növelni/csökkenteni, feltételként pedig egy érték elérését adhatjuk meg.
A for ciklussal rövidebb és egyszerűbb ciklusokat írhatunk.
Lássunk most erre is egy életszagúbb példát:

print ("A hónap napjai: ");
for ( $i = 1; $i <= 31; $i++)
   {
   print ($i . "
"); // kiírja a hónap napjait } ?>

Példakódunkat élőben is megnézheted itt (8/3 demo).

fel...

És végül: a foreach

A PHP 4-ben megjelent a Perlhez és más nyelvekhez hasonló ún. foreach ciklusszerkezet is. Mivel a foreach jól kezeli a nem numerikus feltételeket is, jól használható a tömbökön végzett műveletekhez. Ezt a ciklust kétféle szintakszissal is használjuk:

foreach (tömb_kifejezés as $ertek)
   {
   utasítások;
   }

?>
foreach (tömb_kifejezés as $kulcs => $ertek)
   {
   utasítások;
   }

?>

Az első forma végigmegy a tömb_kifejezés szolgáltatta tömbön. Minden alkalommal az aktuális elem értéke a $ertek változóba kerül, és a belső tömb mutatót eggyel megnöveli.
A második forma ugyanezt végzi el, de az aktuális elem kulcsa a $kulcs változóba kerül.

foreach ($tomb as $ertek)
   {
   print ("Érték: $ertek
\n"); } ?>

Ez egyelőre kicsit kínainak tűnhet, mivel szóba kerültek eddig ismeretlen fogalmak is. A teljes felsorolás igénye miatt került ide, ha elolvastad a tömbökkel foglalkozó részt, érdemes lesz visszatérni - minden világosabb lesz.

Példakódunkat élőben is megnézheted itt (8/4 és 8/5 demo).

fel...

A break és a continue

A vezérlési szerkezetekhez használhatjuk ezt a további két elemet. Segítségükkel részletesen beállíthatjuk azok működését.

A break azonnal kilép az aktuális for, foreach, while, do..while ciklusból vagy switch szerkezetből - akár az aktuális ciklus futása közben is úgy, hogy a ciklus hátralevő része nem lesz végrehajtva.

Ha több ciklust ágyazunk egymásba, használhatjuk a break elhagyható paraméterét, megadva vele, hány egymásba ágyazott ciklusból kell kilépnie.

while (list (, $ertek) = each ($tomb))
   {
   if ($ertek == "stop")
      {
      break;    // írhattam volna ide 'break 1;'-et is
      }
   print ("$ertek
\n"); } ?>

Példakódunkat itt (8/6 demo) láthatod működés közben.

A continue segítségével átugorhatjuk a ciklus aktuális lefutásának hátralevő részét, és a végrehajtást a következő lefutással folytathatjuk.

A continue is elfogad egy elhagyható szám paramétert, amely megadja, hogy hány egymásba ágyazott struktúrának a hátralévő részét kell átugrani.

while (list ($kulcs, $ertek) = each ($tomb)) {
    if (!($kulcs % 2)) { // a páros indexűek kihagyása
        continue;
    }
    valami_paratlan_dolog ($ertek);
}

?>

A break és a continue után mindig ki kell tenni a ; pontosvessző lezárást.

 
Bejelentkezés
Felhasználónév:

Jelszó:
SúgóSúgó
Regisztráció
Elfelejtettem a jelszót
 
XHTML
 
Linkek

Freewebsite
Programozás.lap.hu
Webmester.lap.hu

 

Veterán anime rajongók egyik kedvence a Vadmacska kommandó. Retrospektív cikket olvashatsz róla az Anime Odyssey blogban    *****    Parfümök, Olajok, Párologtatók mind egy weboldalon! Siess mert nyitási AKCIÓNK nem sokáig tart! Nagy kedvezmények várnak    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    Aki érdeklõdik a horoszkópja után, az nem kíváncsi, hanem intelligens. Rendeld meg most és én segítek az értelmezésben!    *****    A Múzsa, egy gruppi élményei a színfalak mögött + napi agymenések és bölcseletek    *****    KARATE OKTATÁS *** kicsiknek és nagyoknak *** Budapest I. II. XII.kerületekben +36 70 779-55-77    *****    Augusztus 26-án Kutyák Világnapja! Gyertek a Mesetárba, és ünnepeljétek kutyás színezõkkel! Vau-vau!    *****    A horoszkóp elemzésed utáni érdeklõdés, nem kíváncsiság hanem intelligencia. Rendeld meg és nem fogod megbánni. Katt!!!    *****    Cikksorozatba kezdtem a PlayStation történelmérõl. Miért indult nehezen a Sony karrierje a konzoliparban?    *****    Will Vandom Rajongói Oldala &#9829; nosztalgia W.I.T.C.H. a javából, 2006 óta &#9829; Te még emlékszel?    *****    A horoszkóp a lélek tükre, egyszer mindenkinek bele kell néznie. Tedd meg te is, én segítek értelmezni! Kattints! Várlak    *****    Nagyon részletes születési horoszkóp + 3 éves elõrejelzés + kötetlen idejû beszélgetés diplomás asztrológussal! Kattints    *****    Smart Elektronika - Arduino és Okos Elektronikai termékek webáruháza .Álmodd meg, alkosd meg, vezéreld a jövõt!    *****    Smart Elektronika - Arduino és Okos Elektronikai termékek webáruháza .Álmodd meg, alkosd meg, vezéreld a jövõt!    *****    A horoszkóp a lélek tükre, egyszer mindenkinek bele kell néznie, itt: www.csillagjovo.gportal.hu    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését. 0630/583-3168    *****    Nézzen velünk Debreceni Prémium lakásokat! Simonyi ingatlan Nézzen velünk Debreceni Prémium lakásokat! Simonyi ingatlan    *****    Ha egy igazán egyedi és szerethetõ sportanimével szeretnél megismerkedni, tégy egy próbát az Ookiku Furikabutte-vel.    *****    Augusztus 8-án Nemzetközi Macskanap! Addig is gyertek a Mesetárba, és olvassátok el a legújabb cicamesét! Miaúúú!    *****    Smart Elektronika - Arduino és Okos Elektronikai termékek webáruháza .Álmodd meg, alkosd meg, vezéreld a jövõt!