Vetvenie a cykly

1. Vetvenie …. IF

Podmienky sú v php dôležitou súčasťou, bez ktorej sa veľa skriptov nezaobíde. Už z prekladu nám je jasné, že „if“ znamená v predade „ak„. Podmienka if zaisťuje overenie splnenia alebo nesplnenia zadanej podmienky. Základná syntax má 3 typy zápisu (ifelseifelse). Zápis je nasledovný:

if (vyraz1)
  {
  príkazy1
  }
  elseif (vyraz2)
  {
  príkazy2
  }
  else
  {
  príkazy3
  }

Ak je splnený výraz1 == true, vykonajú sa príkazy1 a skočí to na koniec skriptu. Ak je splnený výraz2 == true, budú vykonané príkazy2 (atď.). Ak žiadny výraz nie je splnený, vyhodnotia sa príkazy3. Samozrejme elseif a else sa nemusia použiť. Ďalej môžeme použiť viac elseif, ale v tomto prípade je asi vhodnejšie využiť vetvenie swith, ktoré nám skript môže zjednodušiť.

Príklad:

$a = 8;
  $b = 3;
  $c = 10; 
  if ($a+$b > $c)
  echo $a+$b." je väčšie ako $c";
  elseif ($a+$b < $c)
  echo $a+$b." je menšie ako $c";
  else
  echo "Čísla neobsahujú žiadnu hodnotu";

Výsledok príkladu:

11 je väčšie ako 10

2. Vetvenie …. SWITCH

Má takmer rovnaký význam ako if, ale môže niekedy zjednodušiť stránku. Vďaka tomuto príkazu sa dajú nahradiť dlhé príkazy if. Vetva skriptu je daná hodnotou jedného výrazu. Príkazom break sa dáva najavo ukončenie vetvenia (inak by sa vykonali príkazy v nasledujúcej vetve). Príkazy za default sa vykonajú, pokiaľ výraz neodpovedá žiadnej podmienke.

switch (výraz)
  {
  case podmienka1:   ... break;
  case podmienka2:   ... break;
  case podmienka3:   ... break;
  default:           ... break;
  }

Pokiaľ je výraz == podmienka1: bude vyhodnotené všetko čo je za dvojbodkou. Potom skočí na koniec skriptu (break). Ak sa výraz nebude rovnať žiadnej z uvedených podmienok, budú vykonané príkazy za default:.

Príklad:

$i = 1; 
  if ($i == 0)
  print "i = 0";
  if ($i == 1)
  print "i = 1";
  if ($i == 2)
  print "i = 2"; 
  echo "<br />-----<br />"; 
  switch ($i)
  {
  case 0:
  print "i = 0";
  break;
  case 1:
  print "i = 1";
  break;
  case 2:
  print "i = 2";
  break;
  }

Výsledok príkladu:

i = 1
—–
i = 1

3. Cykly …. WHILE

Slúži k vytvoreniu slučky. Ta opakovane vykonáva nejakú časť kódu, pokiaľ bude splnená zadaná počiatočná podmienka. Ide o cyklus s podmienkou na začiatku. Najskôr je teda vyhodnotená podmienka a potom sa vykonajú jednotlivé cykly. Pokiaľ má podmienka hodnotu true, vykoná sa kód v tele slučky, pokiaľ false, slučka skončí a vykoná sa prvý príkaz za slučkou. Pokiaľ chcete vykonávať jen jeden príkaz, nemusíte písať zložené zátvorky. Opustiť slučku môžete v ktoromkoľvek mieste pomocou príkazu break. Pokiaľ je viac vnorených slučiek, tak sa ukončí práve aktuálna slučka. Pokiaľ chceme napríklad vyskočiť o 2 slučky vyššie použijeme: break 2. Zvyšok tela slučky sa môže preskočiť príkazom continue, vykonávanie potom pokračuje ďalším prechodom slučkou a vyhodnotením podmienky. Opäť môžeme použiť príkaz napr. continue 2, tým preskočíme telá dvoch vnorených slučiek.

while (podmienka)
  {
  text kódu
  }

Príklad:

$i = 1;
  while ($i <= 10)
  print $i++.", ";

Výsledok príkladu:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

Príklad: použitie príkazu break

<?php
  $i = 1;
  while ($i <= 5)
  {
  $j = 1;
  while ($j <= 5)
  {
  echo $j." | ";
  if($j++ == $i) break;
  }
  $i++;
  echo "<br />";
  }
  ?>

Výsledok príkladu:

1 |
1 | 2 |
1 | 2 | 3 |
1 | 2 | 3 | 4 |
1 | 2 | 3 | 4 | 5 |

Príklad: použitie príkazu break x

<?php
  $i = 1;
  while ($i <= 5)
  {
  $j = 1;
  while ($j <= 5)
  {
  echo $j." | ";
  if($j++ == $i) break 2;
  }
  $i++;
  echo "<br />";
  }
  ?>

Výsledok príkladu:

1 |

Príklad: použitie príkazu continue

<?php
  $i = 1;
  while ($i <= 5)
  {
  $j = 0;
  while ($j <= 4)
  {
  $j++;
  if($j % 2) continue;
  echo $j." | ";
  }
  $i++;
  echo "<br />";
  }
  ?>

Výsledok príkladu:

2 | 4 |
2 | 4 |
2 | 4 |
2 | 4 |
2 | 4 |

4. Cykly …. DO / WHILE

Tento príkaz sa podobá príkazu while. Jediný (dosť podstatný) rozdiel je v tom, že podmienka sa vyhodnotí až po vykonaný kódu. Ide teda o cyklus s podmienkou na konci. Je teda posunutý o jeden cyklus. V tomto prípade sa však telo slučky vykoná vždy. V prípade príkazu while tomu tak nemusí byť (pokiaľ sa hneď prvá hodnota nerovná požadovanej). Opäť je možné používať príkazy break a continue s rovnakým efektom ako pri while.

do
  {
  príkazy
  }
  while (podmienka);

Príklad:

<?php
  $i = 1; // $i = 7;
  do
  {
  if ($i < 5)
  {
  print "i nie je dosť veľké.<br />";
  break;
  }
  $i *= $factor;
  if ($i <$minimum_limit)
  break;
  print "i je OK";
  }
  while(0);
  ?>

Výsledok príkladu: pre i = 1

i nie je dosť veľké.

Výsledok príkladu: pre i = 7

i je OK

5. Cykly …. FOR

Ide o zložitejšiu konštrukciu než obyčajná slučka while. Výhodne sa využíva pri zložitejších cykloch. Pracuje sa s tromi výrazmi. Prvý sa vyhodnocuje iba raz (pri vstupe do slučky). Týmto výrazom udáme počiatočnú hodnotu pre opakovanie. Druhým výrazom je podmienka, ktorá sa vyhodnocuje pred každým vstupom do tela slučky. Tretí výraz ukazuje o koľko sa bude premenná zvyšovať pri vykonávaní slučky. Klasicky sa necháva napríklad i++, čo znamená, že sa vždy zväčší o jednotku. Opäť je možnosť využívať príkazy break a continue. Rozdiel je iba v tom, že príkaz continue pred novým vstupom do slučky zaistí vykonanie tretieho výrazu ($i++).

for ($i=1; $i<$p ; $i++)
  {
  príkazy
  }

Najjednoduchšou formou je: for (;;). Potom ide o nekonečný cyklus. Alebo naopak môže byť použitých aj viac výrazov. Tie sa potom oddeľujú čiarkami

Príklad:

for ($i=1, $p=15; $i<$p; $i++)
  echo $i." | ";

Výsledok príkladu:

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Príklad:

for ($i=1, $p=15; $i<$p; $i++, $p--)
  echo $i." | ";

Výsledok príkladu:

1 | 2 | 3 | 4 | 5 | 6 | 7 |

6. Cykly a polia

Cykly sa môžu s výhodou použiť na výpis všetkých (časti) hodnôt poľa.

<?php
  $pole[0] = "Ahoj ";
  $pole[1] = "Peter, ";
  $pole[2] = "ako sa ";
  $pole[3] = "máš?";
  ?>

Na výpis predchádzajúceho poľa môžeme s výhodou použiť jednoduchý zápis:

Príklad: Cyklus for

<?php
  for ($i=0; $i<count($pole); $i++)
  echo $pole[$i];
  ?>

Výsledok príkladu:

Ahoj Peter, ako sa máš?

Avšak oveľa efektívnejší spôsob je tento:

Príklad: Cyklus while

<?php
  while (list($key,$value) = each($pole))
  echo $value; 
  echo "<br />alebo<br />"; 
  reset($pole);
  while (list($key,$value) = each($pole))
  echo "pole[$key] = $value <br />";
  ?>

Výsledok príkladu:

Ahoj Peter, ako sa máš?
alebo
pole[0] = Ahoj
pole[1] = Peter,
pole[2] = ako sa
pole[3] = máš?

Príklad: Cyklus foreach

$arr1 = array(5 => 43, 32, 56, "b" => 12);
  foreach($arr1 as $kluc => $hodnota) echo "\$arr1[".$kluc."] = ".$hodnota."<br />";

Výsledok príkladu:

$arr1[5] = 43
$arr1[6] = 32
$arr1[7] = 56
$arr1[b] = 12