PHP - Valintojen tekeminen

VALINTOJEN TEKEMINEN OHJELMASSA

Erilaisten valintojen toteuttamiseen PHP:ssä erilaisia if-lauseita ja switch..case-lause.

Valintoja suoritetaan ennalta asetettujen ehtojen mukaan, esimerkiksi:

Matti vie Maijan elokuviin,
jos hänellä on rahaa 32 euroa.

Matti tarjoaa lisäksi kahvit kahvilassa,
jos hänellä on enemmän kuin 50 euroa.

Muutoin Matti ja Maija juovat kahvinsa kotona.

Ehtorakenteissa tarvitaan usein vertailu- ja loogisia-operaattoreita.



if -lause

if-lause muodostuu seuraavasti:

if (ehto) {
   tehtävät lauseet_1;
  tehtävät lauseet_2;
}

if-lauseessa tutkitaan ehto ja mikäli ehto on tosi (1), suoritetaan lause. Mikäli ehto on epätosi (0), ohjelma siirtyy seuraavaan suoritettavaan lauseeseen.

1.Esimerkki. Lasketaan if-lauseen ehdossa yhteen luku1 ja luku2. Summan perusteella tulostuu jokin kolmesta tekstistä.


  <!DOCTYPE html>
  <html>
   <head>
    <meta charset="UTF-8">
    <style>
	 .vari2{
	   color: Maroon;
     }
	</style>
   </head>

   <body>
    <div class="vari2">
    <?php
     $luku1 = 12;
     $luku2 = 15;

     if ($luku1+$luku2 < "20") 
       echo "Luku on alle 20";
  
     if ($luku1+$luku2 == "27") 
       echo "Luku on tasan 27";
  
     if ($luku1+$luku2 > "30") 
       echo "Luku on yli 30";
    ?> 
    </div>
   </body>
  </html>
  

Tulos www-sivulla:

Luku on tasan 27

Tehtävä 17

Tee PHP-koodaus if-lauseilla joka antaa kokonaispisteitä vastaavan arvosanan seuraavasti:

Kok.pisteet - Arvosana
0 - 118 => 0
119 - 212 => 1
213 - 305 => 2
306 - 400 => 3

Huom ! Esim. 119.1 pisteellä arvosana on 1, 212.1 pisteellä arvosana on 2 jne.


Tehtävä 18

Muokkaa oppaan Muuttujat-kohdan 11-tehtävä antamaan yhteispisteiden mukaan arvosanat taulukkoon:

Pisterajat arvosanoille:
jos pisteet pienempi kuin 120 -> arvosana on 0
jos pisteet on suurempi tai yhtasuuri 120 JA pienempi kuin 175,9 -> arvosana on 1
jos pisteet on suurempi tai yhtasuuri 176 JA pienempi kuin 231,9 -> arvosana on 2
jos pisteet on suurempi tai yhtasuuri 232 JA pienempi kuin 287,9 -> arvosana on 3
jos pisteet on suurempi tai yhtasuuri 288 JA pienempi kuin 343,9 -> arvosana on 4
jos pisteet on suurempi tai yhtasuuri 344 JA pienempi tai yhtäsuuri kuin 400 -> arvosana on 5

Huomaa myös !
Pisteitä voi olla myös yli 400, eli yllä olevista ehdoista puuttuu jotain ?


Ohjelmalohkon käyttäminen if-lauseessa

if-lauseen ehdon toteutuessa voidaan suorittaa yksi lause tai useita lauseita eli ohjelmalohko. Mikäli if-lauseen ehdon toteutumisen seurauksena on suoritettavana useita lauseita, nämä kootaan aaltosulkujen sisään. Ohjelmalohko muodostuu seuraavasti:

if (ehto) {
   tehtävä lause 1;
  tehtävä lause 2;
  ...
  tehtävä lause X;
}


Mikäli ehto on tosi, suoritetaan aaltosulkujen sisällä olevat lauseet, eli lisäämällä aaltosulkeet saadaan if-lauseelle useampia toimintoja aikaan.

Tehtävä 19

Tee PHP-koodaus joka toteuttaa seuraavan ehtorakenteen tulostuksineen:

LUKU_1 = 12
LUKU_2 = 14
LUKU_3 = 16

jos LUKU_2 on yhtäsuuri tai suurempi kuin 14,
näytä LUKU_1 + LUKU_2 ja laskun tulos
näytä LUKU_2 + LUKU_3 ja laskun tulos
näytä LUKU_1 + LUKU_3 ja laskun tulos


Sisäkkäiset if-lauseet

Sisäkkäisten if-lauseiden yleinen muoto on:

if (ehto1){
  if (ehto2){
    tehtävät lauseet;
  }
}

Toinen if-lause on ensimmäisen if-lauseen rungon osa. Lause suoritetaan vain kun molemmat ehdot ovat tosia.


  <div class="vari2">
    <?php
      $luku = 141;
      echo "Tutkittava luku on 141. 
"; if($luku >= 1 & $luku < 500){ echo " Luku on 1 ja 500 välillä,
"; if($luku > 1 & $luku < 250){ echo " sekä luku on 1 ja 250 välissä.
"; } if($luku > 251 & $luku <= 500){ echo " sekä luku on 251 ja 500 välissä."; } } ?> </div>

Tulos www-sivulla:

Tutkittava luku on 141. Luku on 1 ja 500 välillä, sekä luku on 1 ja 250 välissä.

if...else lause

if-lauseessa testataan ehto, mikäli ehto pitää paikkansa, suoritetaan if-lauseelle kirjoitetut tehtävät. Mikäli ehto ei toteudu, toimintoja ei suoriteta. Kuitenkin usein on tilanne että pitäisi jotain toimintoja tehdä vaikka if-lause ei toteutunut. Ratkaisu on if...else-lause, joka sallii suoritettavaksi tehtäviä mikäli if-ehto ei toteudu.



Yleinen muoto if...else lauseelle:

if (ehto){
  tehtävät lauseet;
}
else
  tehtävät lauseet;

3. Esimerkki. Käytetään date()-funktioita kellonajan saamiseksi aika-muuttujaan. Muuttujassa aika olevaa tietoa tutkitaan if- lauseen ehdossa.
Mikäli kello on 9 - 18, toivotetaan Hyvää päivää ! ja näytetään kellonaika, muuten näytetään Hyvää iltaa ! teksti.
(Esimerkissä käytetään OR-operaattorina saman loogisen operaation tekevää || -operaattoria)


  <div class="vari2">
    <?php
      $aika = date("H:i");

      if ($aika >= "9" || $aika < "18")
      {
        echo "Hyvää päivää ! 
Kello on "; echo $aika; } else { echo "Hyvää iltaa !"; } ?> </div>

Tulos www-sivulla:

Hyvää iltaa !

Sisäkkäiset if...else lauseet:

if (ehto)
{
  if (ehto 2)
   lause A;
  else
   lause B;
}
else
  lause C;

Sisäkkäiset if-else rakenteet. 4. Esimerkki, ilmoitukset lämpötilan mukaan:


  <div class="vari2">
    <?php
      $lampo = 13.1;

      if ($lampo < 25) 
      {
        if ($lampo > 15)
          echo "Sopivan lämmintä.";
        else
          echo "Liian kylmää !";
      }
      else
       echo "Nyt tuli hiki...";
    ?> 
  </div>
  

Tulos www-sivulla:

Liian kylmää !

if elseif else lause

Lauserakennetta if elseif elsevoidaan käyttää vaihtoehtona rakenteelle if - if - else.


Yleinen muoto if...elseif...else lauseelle:

if (ehto 1)
{
  if (ehto 1)
   lause A;
 elseif (ehto 2)
   lause B;
}
else
  lause C;

5. Esimerkki. Jäähdytyksen käynnistäminen ja sammuttaminen:


  <div class="vari2">
    <?php
      $lampo = 19.9;
      echo "Anturin lämpötila " . $lampo . "<br>";
 
      if ($lampo > 23) {
        echo " Käynnistä jäähdytys. ";
      }
	  elseif ($lampo < 20) {
        echo "Pysäytä jäähdytys";
      } 
	  else {
          echo "Sisälämpö välillä 20 - 23.";
      }
    ?> 
  </div>
  

Tulos www-sivulla:

Anturin lämpötila 19.9
Pysäytä jäähdytys

else-osa kuuluu aina lähimpään if-osaan. Sulkuja käyttämällä voidaan järjestystä muuttaa. Sisäkkäisten if...else-lauseiden käytössä on oltava huolellinen, koska else saattaa viitata helposti väärään if-osaan.


switch...case lause

Käyttämällä switch...case-rakennetta on mahdollisuus suorittaa useasta valinnasta yksi lause tai lausekokonaisuus.

Yleinen muoto switch...case lauseelle:

switch(valinta){
   case valinta_1:
     lause 1;
   break;
   case valinta_2:
     lause 2;
   break;
	.....
   case valinta_n:
     lause n;
   break;
   default:
     oletuslause;
 }

Rakenteessa switch...case testataan muuttuja arvoa. Mikäli case tapauksista muuttujan arvo löytyy, case:n lause suoritetaan. Muussa tapauksessa suoritetaan default-osa, default-osa voi myös puuttua.
Tutkittavan muuttujan arvo voi olla kirjain, teksti, numero jne.

6. Esimerkki. Marjojen väri:


  <div class="vari2">
    <?php
      $Vari = "Mustikka";

      switch ($Vari) {
        case "Mansikka":
          echo "Mansikan väri on punainen!";
        break;
        case "Mustikka":
          echo "Mustikan väri on sininen!";
        break;
        case "Lakka":
          echo "Lakan väri on oranssi!";
        break;
        default:
          echo "Sinun marjasi ei ole Mansikka, Mustikka tai edes Lakka!";
      }
    ?> 
  </div>
  

Tulos www-sivulla:

Mustikan väri on sininen!

Tehtävä 20

Tee PHP-koodaus käyttäen switch-case rakennetta joka muuttujan tulos arvon mukaan toimii seuraavasti:

tulos = 123
näytä teksti "Tulos on 123"
tulos = 234
näytä teksti "Tulos on 234"
tulos = 456
näytä teksti "Tulos on 456"
tulos = 567
näytä teksti "Tulos on 567"

Testaa koodaus kaikilla annetuilla arvoilla.