...:::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

 

Szereted az egyedi történeteket? Kíváncsi vagy, hogy mire képes egy hobbi író? Ha igen, nézz be hozzám!    *****    Sziasztok! A Moobius pályázatán elindult két regényem. Kérlek támogass! Bõvebb információt itt olvashatsz. Katt rám.    *****    Sziasztok! A Moobius pályázatán elindult két regényem. Kérlek támogass! Bõvebb információt itt olvashatsz. Katt rám.    *****    Debrecen Nagyerdõaljai, 150m2-es alapterületû, egyszintes, 300m2-es telken, sok parkolós családiház eladó 06209911123    *****    RELIGIO-PORTAL /// NE FÉLJ, CSAK HIGYJ! ///RELIGIO-PORTAL /// NE FÉLJ, CSAK HIGYJ! ///RELIGIO-PORTAL    *****    PREKAMBRIUM //// A TUDÁS BIRODALMA    *****    PREKAMBRIUM //// A TUDÁS BIRODALMA    *****    Lakatos munka- Épületlakatos munka- Haidekker kerítés - Haidekker kapu- Teraszkorlát- Lakatos munka szerelés- Hullámrács    *****    Itachi Shinden második fejezet!! - ÚJ FEJEZET - Felkerült a könyv második harmada!! Konoha.hu - KATT!! KATT! KATT!! KATT    *****    Pont ITT Pont MOST! Pont NEKED! Már fejlesztés alatt is szebbnél szebb képek! Ha gondolod gyere less be!    *****    Kedves Csokoládé kedvelõk! Segítségeteket kérném a kérdõívem kitöltéséhez! Témája a CSOKOLÁDÉ MÁRKÁK! Köszön    *****    Mindig tudnod kell, melyik kikötõ felé tartasz. - ROSE HARBOR, a mi városunk - FRPG    *****    A boroszkányok gyorsan megtanulják... Minden mágia megköveteli a maga árát. De vajon mekkora lehet ez az ár? - FRPG    *****    Alkosd meg a saját karaktered, és irányítsd a sorsát! Vajon képes lenne túlélni egy ilyen titkokkal teli helyen? - FRPG    *****    why do all monsters come out at night - FRPG - Csatlakozz közénk! - Írj, és éld át a kalandokat!    *****    Aki szörnyekkel küzd, vigyázzon, nehogy belõle is szörny váljék. S ha hosszasan tekintesz egy örvénybe, az örvény vissza    *****    Rose Harbor, ahol a tenger suttog és a múlt sosem tûnik el teljesen. - FRPG - csatlakozz közénk te is :)    *****    Egy kikötõ, ahol minden hullám egy új kezdetet ígér. Rose Harbor, több mint egy város, egy világ a világ mögött.    *****    Rose Harbor &#8211; kisvárosi báj, nagy titkokkal - légy részese te is ennek a kalandnak :) - FRPG    *****    Óceán, erdõ, csillagfény &#8211; minden ösvény Rose Harborba vezet - aktív FRPG közösség