• php-category
    Fájlok betöltése
Ciklusok

A PHP ciklusok leírása, működése, használata

Haszontalannak jelölve: 0
Hasznosnak jelölve: 0
Kulcsszavak: wannacode, kurzus, php, course, cycles, ciklusok
Elérhető: Nem érhető el

A ciklusok olyan feladatok végrehajtására jöttek létre, melyeket többször kell elvégeznünk egymás után. Például, ha az alkalmazásunkban megjelenítünk egy "select" tagot, melyben ki tudjuk választani az évszámot, ahhoz a HTML kódban kézzel létre kell hoznunk minden évszámnak megfelelő "option" értéket az alábbi módon:


    <select>
        <option value="">Válassz évet</option>
        <option value="2015">2015</option>
        <option value="2014">2014</option>
        <option value="2013">2013</option>
        <option value="2012">2012</option>
        <option value="2011">2011</option>
        <option value="2010">2010</option>
    </select>


    

Így az alkalmazásunk megjelenít egy legördülő listát, ahol kiválaszthatunk egy 2010-2015 közötti évszámot. Képzeljük el hogyha az évszámok 1900-tól 2010-ig lennének, kellene írjunk kézzel 110 db. option tagot egyesével. És ha ez a legőrdülő lista több helyen is szerepel?

Az ilyen feladatok leegyszerűsítése érdekében jöttek létre a ciklusok, mivel ez a feladat sablon feladat, ugyanazt kell leírnunk többször, csak az évszám változik. Így erre a feladatra írhatunk egy ciklust, mely végrehajtja az option tagok leírását, és kicseréli az évszámot.

Négy féle ciklus létezik a PHP-ban:

  1. For
  2. Foreach
  3. While
  4. Do-while

Mindenik ciklus képes ugyanazt a feladatot végrehajtani, viszont a működésükben van némi különbség, pl. A "For" ciklus nem képes egy asszociatív tömb elempárjait (tulajdonság és érték) végigvenni és egy feladatot végrehajtani velük, viszont a "Foreach" ciklus igen.

1. For ciklus

A For ciklus szó szerint egy robot, melynek azt tudjuk meghatározni, hogy egy feladatot hányszor hajtson végre. Jelölése a következő:


    <?php
    for( $i=0; $i < $size_of_elements; ++$i )
    {
        // Ide jön a végrehajtandó feladat
    }
    ?>


    

A "$i" egy számláló, melynek segítségével a rendszer észben tartja, hogy hányadik alkalommal hajtja végre a feladatot. Mivel a tömbökben az első elem a "0". helyre kerül, ezért 0-tól szokták indítaní a számlálót. De indíthatjuk 1től is, ahogy szeretnénk.

A "$i < $size_of_elements;" egy feltétel, amely azt határozza meg, hogy a feladatot csak addig hajtsuk végre, amíg a $i értéke kisebb, mint az elemek száma, vagy egy megadott szám.

A "++$i" a feladat végrehajtása után tőrténik, amely növeli az i értékét 1-el. A ciklust úgy is írhattuk volna, hogy:


    <?php
    for( $i=0; $i < $number_of_runs; $i = $i + 1 )
    {
        // Ide jön a végrehajtandó feladat
    }
    ?>


    

2. Foreach ciklus

A Foreach ciklus hasonlóan működik mint a For ciklus, viszont a Foreach ciklust csak tömbök elemein végigmenve tudjuk használni. A különbség a Foreach és a For ciklus között az, hogy nem kell meghatározzuk hányszor hajtson végre egy feladatot, nem kell tudjuk azt sem hány elem létezik az adott tömbben, a ciklus tudni fogja és annyiszor hajt végre egy feladatot ahány elem létezik az adott tömbben.

Jelölése:


    <?php
    foreach( $array_with_elements as $index => $element )
    {
        // Ide jön a végrehajtandó feladat
    }

    // Vagy úgy is írhatnánk, hogy:
    foreach( $array_with_elements as $property => $value )
    {
        // Ide jön a végrehajtandó feladat
    }
    ?>


    

Mindkét példa eredménye ugyanaz, csak a változók neve változott, attól függően, hogy mit tartalmaz az adott tömb. Első példánál mondhatjuk, hogy van egy listánk amelyben több elem tulajdonságai vannak, melyeket kb. így ábrázolhatnánk:


    Array(
        "0" => array(
                "property"  => "value",
                "property1" => "value1",
                "property2" => "value2",
            ),
        "1" => array(
                "property"  => "value",
                "property1" => "value1",
                "property2" => "value2",
            ),
        "2" => array(
                "property"  => "value",
                "property1" => "value1",
                "property2" => "value2",
            ),
    )


    

A második példa az előző példa belső tömbjeire illik rá inkább, a elnevezések alapján.

Ha az indexek nem számok, abban az esetben For ciklust nem tudunk használni, így a Foreach a legalkalmasabb ciklus erre. Pl.


    Array(
        "images"    => array(
                        "property"  => "value",
                        "property1" => "value1",
                        "property2" => "value2",
                    ),
        "files"     => array(
                        "property"  => "value",
                        "property1" => "value1",
                        "property2" => "value2",
                    ),
        "categories"=> array(
                        "property"  => "value",
                        "property1" => "value1",
                        "property2" => "value2",
                    ),
    )


    

3. While ciklus

A While ciklus alkalmazása olyankor esedékes amikor nem tömb elemei határozzák meg a végrehajtások számát, hanem amikor nem tudjuk meghatározni, hogy pontosan hány alkalommal kell végrehajtanunk a feladatot, de egy feltétellel meg kell határozzuk, hogy meddig hajtsa végre egymás után.

Jelölés és alkalmazási példák:


    <?php
    // Amíg nem esik az eső
    while( $is_raining == FALSE )
    {
    }

    // Amíg nem létezik az adott fájl
    while( file_exists( $file ) == FALSE )
    {
    }

    // Amíg az adott fájlban van sor amit beolvasni
    while( fgets( $file, 1000 ) != FALSE )
    {
    }
    ?>


    

A ciklust jól alkalmazva felhasználhatjuk olyan tömbök elemein végrehajtandó feladat végrehajtásához, amelyben az indexek számok.

Fontos tudni, hogy a While ciklus csak akkor hajtja végre a feladatot, ha a feltétel teljesül.

4. Do-while ciklus

A Do-While ciklus pont olyan mint a While ciklus, csak 2 dologban különbözik, jelölése:


    <?php
    do
    {
        // A feladatot végrehajtjuk
    }
    while( $is_raining == FALSE )
    // Ha még nem esik az eső, akkor végrehajtjuk a feladtot ismét
    ?>


    

A Do-While ciklus működése annyiban különbözik a While ciklusétól, hogy ez legalább egyszer végre hajtja a feladatot .

Feladatok megszakítása

Amennyiben valamilyen okból szeretnénk, a feladatok végrehajtását meg lehet szakítani. Ezt kétféle képpen tehetjük meg:

  1. break
  2. continue

A "break" megszakítás esetében a feladat végrehajtása teljesen megáll. Ha egy nagy listának az elemeivel hajtunk végre egy feladatot, és a 10. után szeretnénk megszakítani, akkor a break a megfelelő. Pl.


    <?php
    foreach( $elements as $index => $element )
    {
        // A 10. után megszakítjuk
        if( $index > 10 )
        {
            break; // megszakítás
        }

        // eddig a sorig csak az első 10 elem jut el
        // feladat végrehajtása
    }
    ?>


    

A "continue" esetében nem történik végleges megszakítás, csak az adott elemmel nem hajtja végre a feladatot, hanem ugrik a következő elemre. Például ha van egy listánk amely könyveket tartalmaz, de mi csak egy kategóriából szeretnénk kiíratni őket, akkor a continue a megfelelő egy feltétel segítségével.


    <?php
    foreach( $books as $book )
    {
        // Ha a könyv kategóriája nem horror, ugrunk a következő könyvre
        if( $book["category"] != "horror" )
        {
            continue; // ugrás a következőre
        }

        // eddig a sorig csak az a könyv jut el, melyiknél talál a kategória
        // feladat végrehajtása
    }
    ?>


    

A "continue" használata esetében csak a For és a Foreach ciklusok tudják, hogy mi lesz a következő elem. A While és a Do-While ciklusok esetében, csak akkor működik jól, ha jól adjuk meg a feltételt, másképp könnyen végtelen feladat végrehajtást idézhetünk elő!

Hasonló leckék