Práce s příznaky v PHP
Nyní se naučíme pracovat s příznaky.
Příznak je speciální proměnná, která
může nabývat pouze dvou hodnot: true
a false. Pomocí příznaků lze řešit
úkoly, které ověřují nepřítomnost něčeho:
lze například zkontrolovat, že v poli
není prvek s určitou hodnotou. Pojďme začít.
Pojďme vyřešit následující úkol: je dáno pole
s čísly, je třeba zkontrolovat, zda v něm
je prvek s hodnotou 3 nebo ne. Pokud
ano - vypište '+++', pokud ne -
vypište '---'.
Nejprve zkusme vypsat '+++'.
K tomu projdeme všechny prvky našeho pole
a podmínkou se zeptáme - je aktuální
prvek roven hodnotě 3. Pokud ano - vypíšeme
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Ale naše řešení není nejlepší: pokud
v poli bude ne jedna hodnota 3,
ale několik, pak se '+++' vypíše několikrát.
Pojďme upravit naše pole (vytvořme
dva prvky s hodnotou 3) a přesvědčme se o tom:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // vypíše se několikrát
}
}
?>
Pojďme problém opravit: ukončeme cyklus pomocí
break, pokud byl prvek již nalezen:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // ukončíme cyklus
}
}
?>
Nyní zkusme udělat to, aby,
pokud v poli vůbec nejsou prvky s hodnotou
3, vypsalo '---'. Častým
omylem je přidat else k
naší podmínce - v tomto případě se '---'
bude vypisovat pro všechny prvky, které nejsou
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // vypíše se na prvku 3
} else {
echo '---'; // vypíše se na prvcích 1, 2, 4, 5
}
}
?>
Takže, nápad přidat else - je špatný
nápad, nefunguje. Pro řešení úkolů tohoto
druhu (takové úkoly se vyskytují dostatečně
často) se používají takzvané příznaky.
Jak již bylo zmíněno výše, příznak - je taková
proměnná, která může nabývat dvou hodnot:
true nebo false.
Takže, pojďme vytvořit proměnnou flag
s touto hodnotou: pokud je rovna true,
pak v poli je prvek 3, a pokud
false, pak takový prvek není.
Nejprve nastavme proměnnou flag
na hodnotu false - to znamená, že budeme předpokládat,
že prvek 3 v poli není:
$arr = [1, 2, 3, 4, 5];
$flag = false; // předpokládáme, že prvek 3 v poli není
Poté spustíme cyklus s podmínkou tak, jak jsme to dělali
dříve. Pokud cyklus zjistí, že v poli
je prvek 3 - pak nastavíme proměnnou flag
na hodnotu true a ukončíme cyklus
pomocí break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // předpokládáme, že prvek 3 v poli není
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // prvek existuje - přenastavíme proměnnou $flag
break; // ukončíme cyklus
}
}
?>
Odpověď na otázku, zda je v poli 3
nebo ne, můžeme dát až po cyklu.
A tuto odpověď již máme: po cyklu
proměnná flag mohla zůstat false
nebo mohla změnit svou hodnotu na true,
pokud cyklus objevil v poli 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// zde je proměnná $flag rovna buď true, nebo false
?>
Nyní po cyklu můžeme vytvořit podmínku, která
se podívá na proměnnou flag a vypíše
na obrazovku '+++' nebo '---':
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo '+++';
} else {
echo '---';
}
?>
Je dáno pole:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Zkontrolujte, zda v tomto poli je prvek
'c'. Pokud ano - vypište '+++',
a pokud ne - vypište '---'.
Napište kód, který bude kontrolovat, zda je číslo prvočíslo nebo ne. Prvočíslo je dělitelné pouze jedničkou a samo sebou, a není dělitelné jinými čísly.