PHP - Toistaminen

Toistolauseet

Toistolause tarkoittaa jonkin tai joidenkin lauseiden toistamista. Toistolauseiden (silmukkarakenteet eli loopit) avulla ohjelmalausetta toistetaan niin kauan kunnes tietty ehto on täytetty.

PHP:ssä on käytössä seuraavat toistolauseet: for, foreach, while ja do...while.


for-toistolause

Toistolausetta for käytetään tilanteissa, joissa halutaan suorittaa jotakin tehtävää tietty kertamäärä.

for-komennon yleinen muoto:

for (alustus; toisto-ehto; päivitys){
   lause tai lauseet;
}

Toistolauseen for suluissa on kolme osaa:
Alustus on toiminto jolla silmukkaa ohjaava muuttuja alustetaan, eli asetaan "laskuriin" alkuarvo jota muutetaan päivityksen avulla.
Ehto on aina TOSI tai EPÄTOSI. Ehto-osan ollessa TOSI voidaan silmukan suoritusta jatkaa, ehto-osaa voidaan pitää myös lopetusehtona.
Päivitys-osassa muutetaan alustus-osan muuttujan arvoa esim. lisätään silmukan laskuria.

Osista jokin tai kaikki voivat puuttua mutta puolipisteet on laitettava sulkujen sisälle.

for on aloitusehtoinen komento, joka tarkoittaa, että ehto testataan ennen silmukkaan menoa.

Esimerkki 1. Esimerkki näyttää numerot yhdestä kymmeneen:


  <!DOCTYPE html>
  <html>
   <head>
    <meta charset="UTF-8">
   </head>

   <body>

    <?php
      for ($kertaa = 0; $kertaa <= 10; $kertaa++) {
        echo "Numero on: $kertaa <br> ";
      }
    ?>

   </body>
  </html>
  

Tulos www-sivulla:

Numero on: 0
Numero on: 1
Numero on: 2
Numero on: 3
Numero on: 4
Numero on: 5
Numero on: 6
Numero on: 7
Numero on: 8
Numero on: 9
Numero on: 10
Tehtävä 21

Toteuta for-toistolause joka näyttää numerot kymmenestä yhteen.


Esimerkki 2. Esimerkki näyttää numerot nolasta sataan kymmenen välein:


  <div class="pun"> 
    <?php
      for ($luku = 0; $luku <= 100; $luku = $luku + 10) {
        echo "Luku on: $luku <br>";
      }
    ?>
  </div>
  

Tulos www-sivulla:

Luku on: 0
Luku on: 10
Luku on: 20
Luku on: 30
Luku on: 40
Luku on: 50
Luku on: 60
Luku on: 70
Luku on: 80
Luku on: 90
Luku on: 100
Tehtävä 22

Toteuta for-toistolause joka näyttää nollasta alkaen 50 välein 500 asti.


Esimerkki 3. Ohjelma jossa sijoitetaan yksiuloitteiseen taulukkoon 10 desimaalilukua ja tulostetaan annetut luvut taulukosta näytölle:


  <div class="pun"> 
    <?php
      $luvut = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
      $taulukoko = count($luvut);

      for($rivi = 0; $rivi <  $taulukoko; $rivi++) {
        echo $luvut[$rivi];
        echo "<br>";
      }
    ?>
  </div>
  

Tulos www-sivulla:

1
2
3
4
5
6
7
8
9
10
Tehtävä 23

Toteuta for-toistolauseella taulukko-ohjelma, joka tulostaa suomenkielen aakkoset järjestyksessä.


Sisäkkäisellä for-lauseella voi käsitellä esim. kaksi-uloitteista taulukkoa.

Ulompi for-lause hoitaa rivin vaihtamisen ja sisempi for-lause tulostuksen riville, taulukon ollessa kyseessä tulostaisi sarakkeissa olevan tiedon.

Esimerkki 4. Ohjelma tulostaa alaviivoja, ulompi for vaihtaa riviä ja sisempi for tulostaa alaviivat riville:


  <div class="pun"> 
    <?php
      for ($rivi = 1; $rivi <= 10; $rivi++){
        for ($sarake = 1; $sarake <= 10; $sarake++){
	      echo " _ ";
        }
        echo "<br>";
	  }
    ?>
  </div>
  

Tulos www-sivulla:

_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
Tehtävä 24

Toteuta for-toistolauseilla taulukko-ohjelma joka tulostaa suomenkielen aakkoset järjestyksessä, 5 kirjainta
kirjainta riville välilöynnillä erotettuna.


Suuren taulukoiden sisällön esittämiseen www-sivuille on lyhin koodi saadaan käyttämällä for-lauseita.

Esimerkki 5. Tulostetaan taulukon sisältö sisäkkäisten for-lauseiden avulla.


  <div class="pun"> 
    <?php
      $taulu = array(
                array("1.rivi:","A","B","C","D","E"),
                array("2.rivi:","F","G","H","I","J"),
                array("3.rivi:","K","L","M","N","O"),
                array("4.rivi:","P","Q","R","S","T"),
                array("5.rivi:","U","V","W","Y","Y")
               );
			
      for ($rivi = 0; $rivi <= count($taulu); $rivi++) {
        for ($sarake = 0; $sarake <= 6; $sarake++){
	      echo " ". $taulu[$rivi][$sarake] ." ";
      }
      echo "<br>";
      }
    ?>
  </div>
  

Tulos www-sivulla:

1.rivi: A B C D E
2.rivi: F G H I J
3.rivi: K L M N O
4.rivi: P Q R S T
5.rivi: U V W Y Y

Tehtävä 25

Muokkaa yllä olevasta esimerkistä 4 * 7 taulukko.
(4 riviä, 7 saraketta)
Sijoita taulukkoon seuraavat:

Nimi            Koe 1 Koe 2 Koe 3 Koe 4 Yht. Arvosana
Ykkönen Alli    30    40    50    60    0    0
Kakkonen Bertta 40    50    60    70    0    0
Kolmonen Carita 50    60    70    80    0    0
Näytä taulukon sisältö for-lauseiden avulla.

foreach - rakenne

Toistolause foreach tarjoaa helpon tavan toistaa taulukot.
Ainoastaan taulukot ja objektit toimivat foreach-rakenteen kanssa, yrittäessä käyttää sitä muun datan kanssa ohjelma antaa error-koodin.

Esimerkki 6. Yksi-uloitteisen taulukon näyttäminen www-sivulle:


  <div class="pun"> 
    <?php
      $värit = array("Punainen", "Vihreä", "Sininen", "Keltainen"); 

      foreach ($värit as $kaikki) {
        echo "$kaikki <br>";
      }
    ?>
  </div>
  

Tulos www-sivulla:

Punainen
Vihreä
Sininen
Keltainen

Esimerkki 7. Objektissa ika on solujen niminä kolmen henkilön etunimet ja varsinaisena sisältönä henkilöiden iät.

Objektin sisältö järjestetään asort()-funktiolla ikäjärjestykseen nuorimmasta vanhimpaan sekä näytetään www-sivulle järjestyksessä nimi ja ikä. Huomaa kuinka taulukon sisällön järjestys muuttui:


  <div class="pun"> 
    <?php
      $ika = array("Arto"=>"24", "Esko"=>"21", "Heikki"=>"22");
      asort($ika);

      foreach($ika as $rivi => $rivi_alue) {
        echo "Nimi - " . $rivi . ", Ikä - " . $rivi_alue;
        echo "<br>";
      }
    ?>
  </div>
  

Tulos www-sivulla:

Nimi - Esko, Ikä - 21
Nimi - Heikki, Ikä - 22
Nimi - Arto, Ikä - 24

Kysymys: Mikä tieto on muuttujissa sarake ja sarake_alue ?


while-lause

Toistolauseessa while "silmukan runkoa" suoritetaan niin kauan kuin ehto on tosi. Kun ehto tulee epätodeksi, ohjelman suoritus siirtyy silmukkaa seuraavaan lauseeseen. while on alku-ehtoinen toistolause, eli ensin tutkitaan toteutuuko ehto ennenkuin rakenteen sisään mennään.

while -lauseen yleinen muoto:

while (toisto-ehto) {
      ohjelmalause;
  }
  

Esimerkki 8. Toistetaan viisi kertaa tekstin näyttäminen ja jokaisella kerralla näytetään numero muuttujassa oleva arvo:


  <div class="pun"> 
    <?php
      $numero = 1;

      while($numero <= 5) {
        echo "Numero on: $numero <br>";
        $numero++;
      }
    ?>
  </div>
  

Tulos www-sivulla:

Numero on: 1
Numero on: 2
Numero on: 3
Numero on: 4
Numero on: 5
Tehtävä 26

Muuta esimerkin (yllä) while-silmukkarakenne, näyttämään numerot kymmenestä yhteen.



do... while lause

Toistolause do...while on samantyyppinen kuin while-silmukka. Toisotolauseen do...while ero while ja for lauseisiin on, do..while on lopetusehtoinen. Lause do...while suoritetaan aina vähintään yhden kerran, koska ehto testataan rakenteen lopussa eikä sen alussa.

Toistolause do...while yleinen muoto:

do {
      ohjelmalause;
  } while (lopetus-ehto);
  

Esimerkki 9. Toistetaan viisi kertaa tekstin näyttäminen ja jokaisella kerralla näytetään numero muuttujassa oleva arvo:


  <div class="pun"> 
    <?php
      $naula = 1;

      do {
        echo "Lyö $naula. naula, KOP! <br>";
        $naula++;
      } while ($naula <= 10);
    ?>
  </div>
  

Tulos www-sivulla:

Lyö 1. naula, KOP!
Lyö 2. naula, KOP!
Lyö 3. naula, KOP!
Lyö 4. naula, KOP!
Lyö 5. naula, KOP!
Lyö 6. naula, KOP!
Lyö 7. naula, KOP!
Lyö 8. naula, KOP!
Lyö 9. naula, KOP!
Lyö 10. naula, KOP!

Esimerkki 10. Toistolause do...while näyttää yksi-uloitteisen taulukon:


  <div class="pun"> 
    <?php
      $rivi = 0;
      $valmistaja = array("Sony","Apple","Samsung","Huawei","Panasonic");
  
      do {
	    echo $valmistaja[$rivi] . "<br>";
	    $rivi++;
      } while ($rivi < 5);
    ?>
  </div>
  

Tulos www-sivulla:

Sony
Apple
Samsung
Huawei
Panasonic
Tehtävä 27

Siirry linkistä Muuttujat-sivulle
ja kopioi PHP-esimerkki otsikon alta Taulukon solujen nimeäminen, objektit.

- Muuta taulukon solujen nimiksi kirjaimet A - F.
- Sijoita taulukon solujen sisällöksi etunimet, Anthony, Bertha, Cecilia, David, Edward ja Felicia.
Toteuta PHP-koodaus käyttäen do-while toisto lausetta seuraavasti:
- nimi-muuttujaan voidaan antaa solun nimi kirjaimella (A-F)
- do-while näyttää taulukon sisällön (etunimet) alekkain alusta alkaen annettuun kirjaimeen asti.



goto -komento

PHP-kieli sisältää myös goto -komennon, tosin sen käyttöä ei suositella koska se johtaa usein sekaviin kooditoteutuksiin.



break -komento

Komennon break ensisijainen käyttö on keskeyttää silmukan suoritus. Kun havaitaan break-komento silmukan sisäpuolella, silmukan ajo keskeytetään kokonaan. Komennolla break voidaan esimerkiksi keskeyttää ohjelmarakenteen suorittaminen liian suuren numero-arvon syntyessä suorituksen aikana.

Esimerkki 11, break-komennon käytöstä. Jos numero-muuttuja on suurempi kuin 5, silmukka lopetetaan kesken.:


  <div class="pun"> 
   <?php
     for ($numero = 1; $numero <= 10; $numero++) {
       if ($numero > 5) break;
       echo "Numero on $numero. <br>";
     }
   ?>
  <div>
  

Tulos www-sivulla:

Numero on 1.
Numero on 2.
Numero on 3.
Numero on 4.
Numero on 5.


continue -komento

Komentoa continue käytetään ohittamaan silmukan loppuosa. Komentoa käytetään kuten break- komentoa, mutta komennon käyttö ei johda silmukan keskeyttämiseen vaan silmukan suoritusta jatketaan silmukan alusta.

Esimerkki 12. Toistamista suorittavassa for-lauseessa jokaisella kierroksella ohitetaan continue-komennolla toistolauseen viimeinen echo:


  <div class="pun"> 
   <?php
     for ($numero = 0; $numero <= 10; $numero++) {
       echo "Näytetään numero $numero. <br>";
       continue;
       echo "Tätä ei näytetä koskaan. <br>";
     }
   ?>
  <div>
  

Tulos www-sivulla:

Näytetään numero 0.
Näytetään numero 1.
Näytetään numero 2.
Näytetään numero 3.
Näytetään numero 4.
Näytetään numero 5.
Näytetään numero 6.
Näytetään numero 7.
Näytetään numero 8.
Näytetään numero 9.
Näytetään numero 10.
Tehtävä 28

Muokkaa ylläoleva koodi siten että,
teksti "Tämä näkyy" tulostuu tekstin "Näytetään numero X" alle kun numero on 0 - 4 sekä kun numero on 8 - 10.