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

Gyakran addik olyan feladat, amikor egy utastssort kell sokszor ismtelni. Ilyenkor az helyett, hogy 'n'-szer lernnk az utastssort, gy rjuk meg, hogy nmagt ismtelje, amg szksges. Ezeket az nmagba visszatr utastsokat nevezzk ciklusoknak.
Szksg van ciklusokra, ha vgig akarunk futtatni valamit, akr egy file-t olvasunk vgig vagy szmllunk, de rengeteg egyb dologra hasznosak.
A PHP tbbfle ciklust tmogat - ezekkel fogunk most megismerkedni.

A legegyszerbb: a while ciklus

A while ciklusok a PHP legegyszerbb ciklusai. ppen gy viselkednek, mint a C nyelvbeli megfelelik. A while ltalnos szintaxisa:

while (felttel)   // addig fut, mg a felttel igaz
   {
   utastsok;
   }
?>

A ciklus minden lefutsa eltt megvizsglja a felttelt, addig fut amg a felttel igaz. Amint a felttel hamis lesz, a ciklus ismtldse megszakad. Mivel a felttel a ciklus kezdetekor rtkeldik ki, mg ha az utastsblokk belsejben hamiss is vlik a felttel, a blokk vgrehajtsa akkor sem ll meg.
Ha a while ciklusban tbb utastst is kiadunk, hasznljunk kapcsos zrjeleket.

while ( $szamlalo < 10 )   // itt adjuk a felttelt
   {
   print ($szamlalo ."
"); // ezt a blokkot hajtja vgre tbbszr is $szamlalo++; } ?>

Hogyan mkdik?
Adtunk egy kezdeti rtket a $szamlalo vltoznak, a ciklus lefutsnak felttele, hogy a $szamlalo 10-nl kisebb legyen. Mivel a ciklusban a $szamlalo rtkt mindig eggyel nveljk, a 9. lefutskor a felttelnk mr nem teljesl - a ciklus lell s a program tovbblp a kvetkez kdrszre.

A pldt megnzheted mkds kzben is itt (8/1 demo).

Figyelem:
Ciklusoknl rsnl mindig gyeljnk arra, hogy biztostva legyen annak lellsa, klnben knnyen vlhat vgtelen cikluss. Ilyenkor a kd vgrehajtsa megll ennl a rsznl, addig ismtli, amg a PHP idtllps miatt hibazenettel lell.
me egy plda vgtelen ciklusra - csak nzzk meg, mirl van sz, de ezt nem kell kiprblni:

// HIBS KD, vgtelen ciklust eredmnyez
while ( $szamlalo < 10 )
   {
   print ($szamlalo ."
"); } ?>

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

fel...

Ugyenez fordtva: do while

Elfordulhat, hogy a ciklusba zrt utastsnak egyszer mindenkppen le kell futnia - akkor is, ha a felttel mindig hamis. Ilyenkor hasznljuk a htultesztel do .. while ciklust, ahol a felttel teljeslst a ciklus vgn vizsgljuk. Az els lefutsnak teht a hamis felttel sem akadlya.
gy nz ki:

do
   {
   utastsok;
   }
while (felttel);
?>

Figyelem:
A do while ciklusnl a felttel utn ki kell tenni a sorvgi ; pontosvesszt.

fel...

A sokoldal: a for ciklus

A kvetkez a for ciklus. Br ez semmivel nem ad tbbet mint az ell vagy htultesztel while ciklus, de mivel rugalmasan bellthat, elterjedten hasznljk.

Meghatrozunk benne egy vltozt, adunk egy felttelt, amg a ciklus ismtldik, vgl minden lefutskor nveljk, esetleg cskkentjk eggyel.
Vltozknt hagyomnyosan a $i nev vltozt szoks hasznlni erre a clra.

for ( vltoz meghatrozsa; felttel; vltoz nvelse)
   {
   utastsok;
   }

?>

Mint ltjuk, a for ciklusnak numerikus felttelt adhatunk - azaz a vltoz egy szm, amit aztn lehet lefutsonknt nvelni/cskkenteni, felttelknt pedig egy rtk elrst adhatjuk meg.
A for ciklussal rvidebb s egyszerbb ciklusokat rhatunk.
Lssunk most erre is egy letszagbb pldt:

print ("A hnap napjai: ");
for ( $i = 1; $i <= 31; $i++)
   {
   print ($i . "
"); // kirja a hnap napjait } ?>

Pldakdunkat lben is megnzheted itt (8/3 demo).

fel...

s vgl: a foreach

A PHP 4-ben megjelent a Perlhez s ms nyelvekhez hasonl n. foreach ciklusszerkezet is. Mivel a foreach jl kezeli a nem numerikus feltteleket is, jl hasznlhat a tmbkn vgzett mveletekhez. Ezt a ciklust ktfle szintakszissal is hasznljuk:

foreach (tmb_kifejezs as $ertek)
   {
   utastsok;
   }

?>
foreach (tmb_kifejezs as $kulcs => $ertek)
   {
   utastsok;
   }

?>

Az els forma vgigmegy a tmb_kifejezs szolgltatta tmbn. Minden alkalommal az aktulis elem rtke a $ertek vltozba kerl, s a bels tmb mutatt eggyel megnveli.
A msodik forma ugyanezt vgzi el, de az aktulis elem kulcsa a $kulcs vltozba kerl.

foreach ($tomb as $ertek)
   {
   print ("rtk: $ertek
\n"); } ?>

Ez egyelre kicsit knainak tnhet, mivel szba kerltek eddig ismeretlen fogalmak is. A teljes felsorols ignye miatt kerlt ide, ha elolvastad a tmbkkel foglalkoz rszt, rdemes lesz visszatrni - minden vilgosabb lesz.

Pldakdunkat lben is megnzheted itt (8/4 s 8/5 demo).

fel...

A break s a continue

A vezrlsi szerkezetekhez hasznlhatjuk ezt a tovbbi kt elemet. Segtsgkkel rszletesen bellthatjuk azok mkdst.

A break azonnal kilp az aktulis for, foreach, while, do..while ciklusbl vagy switch szerkezetbl - akr az aktulis ciklus futsa kzben is gy, hogy a ciklus htralev rsze nem lesz vgrehajtva.

Ha tbb ciklust gyazunk egymsba, hasznlhatjuk a break elhagyhat paramtert, megadva vele, hny egymsba gyazott ciklusbl kell kilpnie.

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

Pldakdunkat itt (8/6 demo) lthatod mkds kzben.

A continue segtsgvel tugorhatjuk a ciklus aktulis lefutsnak htralev rszt, s a vgrehajtst a kvetkez lefutssal folytathatjuk.

A continue is elfogad egy elhagyhat szm paramtert, amely megadja, hogy hny egymsba gyazott struktrnak a htralv rszt kell tugrani.

while (list ($kulcs, $ertek) = each ($tomb)) {
    if (!($kulcs % 2)) { // a pros indexek kihagysa
        continue;
    }
    valami_paratlan_dolog ($ertek);
}

?>

A break s a continue utn mindig ki kell tenni a ; pontosvessz lezrst.

 
Bejelentkezs
Felhasznlnv:

Jelsz:
SgSg
Regisztrci
Elfelejtettem a jelszt
 
XHTML
 
Linkek

Freewebsite
Programozs.lap.hu
Webmester.lap.hu

 

* Beugrós munkavállalók éjjel-nappal. * Beugrós munkavállalók éjjel-nappal. * Beugrós munkavállalók éjjel-nappal. *    *****    Elindult a Játék határok nélkül rajongói oldal! Ha te is szeretted a '90-es évek népszerû mûsorát, nézz be ide!    *****    Megjelent a Nintendo Switch 2 és a Mario Kart World! Ennek örömére megújítottam a Hungarian Super Mario Fan Club oldalt.    *****    Homlokzati hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168    *****    A PlayStation 3 átmeneti fiaskója után a PlayStation 4 ismét sikersztori volt. Ha kíváncsi vagy a történetére, katt ide!    *****    A Bakuten!! az egyik leginkább alulértékelt sportanime. Egyedi, mégis csodálatos alkotásról van szó. Itt olvashatsz róla    *****    A PlayStation 3-ra jelentõsen felborultak az erõviszonyok a konzolpiacon. Ha érdekel a PS3 története, akkor kattints ide    *****    Új mese a Mesetárban! Téged is vár, gyere bátran! Mese, mese, meskete - ha nem hiszed, nézz bele!    *****    Az Anya, ha mûvész - Beszélgetés Hernádi Judittal és lányával, Tarján Zsófival - 2025.05.08-án 18:00 -Corinthia Budapest    *****    &#10024; Egy receptes gyûjtemény, ahol a lélek is helyet kapott &#8211; ismerd meg a &#8222;Megóvlak&#8221; címû írást!    *****    Hímes tojás, nyuszipár, téged vár a Mesetár! Kukkants be hozzánk!    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168    *****    Nagyon ütõs volt a Nintendo Switch 2 Direct! Elemzést a látottakról pedig itt olvashatsz!    *****    Elkészítem születési horoszkópod és ajándék 3 éves elõrejelzésed. Utána szóban minden kérdésedet megbeszéljük! Kattints    *****    Könyves oldal - egy jó könyv, elrepít bárhová - Könyves oldal    *****    20 éve jelent meg a Nintendo DS! Emlékezzünk meg ról, hisz olyan sok szép perccel ajándékozott meg minket a játékaival!    *****    Ha érdekelnek az animék,mangák,videojátékok, japán és holland nyelv és kultúra, akkor látogass el a személyes oldalamra.    *****    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!    *****    Könyves oldal - Ágica Könyvtára - ahol megnézheted milyen könyveim vannak, miket olvasok, mik a terveim...    *****    Megtörtént Bûnügyekkel foglalkozó oldal - magyar és külföldi esetek.