PHP

PHP KOULUTUSTA VUONNA 2025!

Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.

PHP:n silmukkarakenteet: while, do while, for ja foreach

PHP tarjoaa useita silmukkarakenteita. Vaikka kaikki silmukat tekevät näennäisesti samaa, on jokaisella rakenteella oma käyttötarkoitus.

while-silmukkarakenne

While-silmukkaa käytetään, kun halutaan suorittaa koodia niin kauan kuin tietty ehto on tosi. Silmukka tarkistaa ehdon ennen lohkon suoritusta. Jos ehto on epätosi heti ensimmäisellä tarkistuksella, silmukkaa ei suoriteta kertaakaan. While lausekkeen syntaksi on:


while (ilmaus) {
    //tee jotain
}

Esimerkiksi siis :


$a = 0;
while ($a<100) {
    $a= $a + 1;  // kasvata arvoa yhdellä joka silmukalla - tämä estää ikisilmukan
    print $a ;
    print "<br/>";

do while-silmukkarakenne

Do-while-silmukka toimii samalla tavalla kuin while, mutta siinä koodi suoritetaan ainakin kerran riippumatta siitä, onko ehto tosi vai epätosi. Ehto tarkistetaan vasta silmukan lopussa.


do while (ilmaus) {
    //tee jotain
}

Esimerkiksi:


$i = 0;
do {
    $i = $i + 1;
    print $i;
    print "<br/>";
} while ($i < 5);   // Ehto tarkistetaan vasta jälkeenpäin

for-silmukka

For-silmukka on tarkoitettu tilanteisiin, joissa lauselohko halutaan suorittaa n - kertaa. Syntaksiltaan se on:


for(alkuarvo; ehto; muutos) {
    // suorita jotain
}

Siispä esimerkiksi :


for ($a = 1; $a <= 5; $a++) {
    print("Luku on : $a <br/> \n");
}

foreach-silmukka

Foreach-silmukkaa käytetään erityisesti taulukoiden läpikäymiseen. Se käy läpi taulukon tai hashtaben arvot ja asettaa kunkin arvon (tai avaimen ja arvon) määritettyihin muuttujiin. Käyttötavasta riippuen syntaksi on jompi kumpi alla olevista:


// tapa 1: kun halutaan käydä läpi vain arvot
foreach ($taulukko as $arvo) {
    // tee jotain
}

// tapa 2: kun halutaan käydä läpi avaimet ja arvot
foreach ($taulukko as $avain => $arvo) {
    // tee jotain avaimen ja arvon kanssa
}


Ensimmäinen tapa purkaa taulukon asettaen sen hetkisen indeksin arvon muuttujaan ($arvo):


// foreach(taulukko as $arvo)
$arrData = array (1,2,3);
foreach ($arrData as $val){
    print $val;  // 1...2...3
}

Jälkimmäinen tapa käy läpi hashtablen nimi-arvo parit ja sijoittaa ne annettuihin muuttujiin ($avain, $arvo).


//foreach(taulukko as $avain => $arvo)
$arrFormat = array (
    "Minä" => "olen",
    "Sinä" => "olet",
    "Hän" => "on"
);

foreach($arrFormat as $form => $verb){
    print "$form $verb";   // minä olen.... sinä olet... hän on
}

Varo ikisilmukkaa

Ikisilmukka syntyy kun silmukkarakenne kohtaa ehdon, joka ei toteudu koskaan. Tälläisessa tilanteessa koodi kuormittaa palvelinta, niin pitkään että palvelimen aikakatkaisu toteutuu tai palvelin kaatuu. Alla oleva esimerkki luo ikisilmukan:


$a = 0;
$b = 0;
While ($a<100) {
    $b=$b+1;
}

Jotta asia korjautuisi tulisi koodin olla:


$a = 0;
$b = 0;
While ($a<100) {
    $b=$b+1;
    $a = $b;
}


break ja continue

Break ja continue ovat apukomentoja, joiden avulla voidaan joko keskeyttää tai jatkaa ohjausrakenteen suoritusta.

Break-komento lopettaa silmukan suorituksen heti, kun sitä kutsutaan. Tämä voi olla hyödyllistä, kun tiedämme, että emme tarvitse enää lisää toistoja.


for ($i = 1; $i <= 10; $i++) {
    if ($i == 5) {
        break;  // Lopettaa silmukan, kun $i on 5
    }
    print "$i <br>";
}

Continue lausetta käytetään kun halutaan ohittaa silmukka jossain tietyssä kohden - kumminkaan siitä kokonaan poistumatta.


for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 == 0) {
        continue;  // Hyppää yli parilliset luvut
    }
    print "$i <br>";
}