Kirjoittaja: Antti Laaksonen (2011).
PHP:ssä on for-silmukan lisäksi myös while-silmukka, johon tutustumme tässä oppaassa. Ideana while-silmukassa on, että silmukka jatkaa koodin toistamista niin kauan kuin haluttu ehto pitää paikkansa. Lisäksi opimme uusia asioita totuusarvoista ja silmukoista.
Tämän oppaan jälkeen olemme käyneet läpi PHP:n tärkeimmät ominaisuudet. Käsiteltyjä asioita soveltamalla voi jo toteuttaa hyvin monenlaista nettisivuille.
while-silmukkaa käytetään seuraavasti:
while (ehto) { koodi }
Silmukka toistaa koodia niin kauan kuin annettu ehto on voimassa. Silmukan ehto määritetään samaan tapaan kuin if-rakenteessa.
Esimerkiksi seuraava koodi tulostaa luvut 1–10:
Yllä olevassa koodissa while-silmukkaa käytetään hyvin samaan tapaan kuin for-silmukkaa. Itse asiassa minkä tahansa for-silmukan voi korvata while-silmukalla ja päinvastoin. Yleensä kuitenkin jompikumpi silmukka sopii paremmin kulloiseenkin ohjelmointitilanteeseen.
Ehtorakenteessa ja while-silmukassa oleva ehto on joko tosi (true
) tai epätosi (false
). Tällaista ehtoa sanotaan totuusarvoksi tai boolean-arvoksi. Totuusarvoja voi tallentaa muuttujiin samaan tapaan kuin merkkijonoja ja lukuja. Esimerkiksi seuraavat koodia vastaavat toisiaan:
Jälkimmäisessä koodissa muuttujan $oikein
arvo on true
, jos salasana on "kissa", ja false
, jos salasana on jotain muuta. Tässä tapauksessa totuusarvon sijoittaminen muuttujaan ei tunnu kovin hyödylliseltä, mutta tulemme kohtaamaan tilanteita, joissa siitä on aitoa hyötyä.
Komennot break
ja continue
ovat usein hyödyllisiä silmukoissa. Komento break
lopettaa silmukan, ja komento continue
siirtyy silmukassa seuraavan kierroksen alkuun. Huomaa, että komentoja voi käyttää sekä for- että while-silmukoissa.
Seuraava koodi heittää noppaa, kunnes tulee luku 6:
Koodin tulostus voi olla esimerkiksi seuraava:
4
2
4
3
3
6
Tässä while-silmukan ehtona on true
, mikä tarkoittaa, että silmukka jatkuu periaatteessa loputtomasti. Kuitenkin silmukan sisällä oleva break
-komento keskeyttää sen, jos nopan silmäluku on 6.
Seuraava koodi tulostaa kaikki parittomat luvut väliltä 1–100:
Koodin tulostus on seuraava:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
Silmukassa oleva koodi tarkistaa, onko luku $i
parillinen, ja siirtyy siinä tapauksessa heti silmukan seuraavalle kierrokselle continue
-komennolla. Niinpä koodi tulostaa vain luvut, jotka ovat parittomia.
Seuraava koodi arpoo lottorivin eli 7 eri numeroa väliltä 1–39:
<?php $oikeat = array(); while (count($oikeat) < 7) { $numero = rand(1, 39); if (in_array($numero, $oikeat)) { continue; } $oikeat[] = $numero; } sort($oikeat); echo "Oikeat numerot: " . implode(", ", $oikeat); ?>
Koodin tulostus voi olla seuraava:
Oikeat numerot: 2, 4, 9, 21, 24, 32, 37
Koodissa on ideana arpoa numeroita yksi kerrallaan taulukkoon $oikeat
. Silmukka jatkuu niin kauan kuin taulukossa on alle 7 numeroa. Funktio in_array
tarkistaa, onko arvottu numero taulukossa valmiiksi. Jos numero on taulukossa, siirrytään uudelle silmukan kierrokselle continue
-komennolla. Muuten arvottu luku lisätään taulukkoon.
Numeroiden arpomisen jälkeen taulukon sisältö järjestetään pienimmästä suurimpaan sort
-funktiolla. Tämän jälkeen numerot tulostetaan pilkuilla erotettuina implode
-funktion avulla. Funktio yhdistää taulukon alkiot merkkijonoksi annettua välimerkkiä käyttäen.
Tässä on vielä toinen lähestymistapa tehtävään:
<?php $numerot = range(1, 39); shuffle($numerot); $oikeat = array_slice($numerot, 0, 7); sort($oikeat); echo "Oikeat numerot: " . implode(", ", $oikeat); ?>
Nyt funktio range
luo taulukon, joka sisältää numerot 1–39. Sitten funktio shuffle
sekoittaa taulukon sisällön ja funktio array_slice
poimii sen 7 ensimmäistä numeroa taulukkoon $oikeat
. Tämän jälkeen riittää järjestää ja tulostaa taulukon $oikeat
sisältö.
Ohjelmointitaitoon kuuluu kaksi asiaa:
PHP-ohjelmoinnissa perusasioita ovat muuttujat, if-rakenne, silmukat ja taulukot. Nämä asiat on syytä muistaa ja ymmärtää hyvin, koska niitä tarvitsee jokaisessa muutamaa riviä pidemmässä PHP-koodissa.
PHP:ssä on valmiina suuri määrä hyödyllisiä funktioita esimerkiksi merkkijonojen ja taulukkojen käsittelyyn. Näitä funktioita ei tarvitse opetella ulkoa, koska niiden toiminnan voi aina tarkistaa PHP:n manuaalista. Jos tietää suurin piirtein, mitä on hakemassa, tarvittava funktio löytyy yleensä manuaalista nopeasti.
Käytännössä useimmin tarvittavat funktiot, kuten taulukon pituuden laskevan funktion count
, oppii ulkoa nopeasti, mutta harvinaisen funktion käyttötavan tarkistaminen PHP:n manuaalista on arkipäivää kokeneellekin PHP-ohjelmoijalle.
Ohjelmointiputkan PHP-haaste sisältää 100 tehtävää, jotka opettavat ohjelmoinnin perusasioiden soveltamista. Kannattaa tarttua haasteeseen!
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.