Рад са заставима у PHP-у
Сада ћемо научити да радимо са заставама.
Застава је специјална променљива која
може да има само две вредности: true
и false. Помоћу застава се могу решавати
задаци који проверавају одсуство нечега:
на пример, може се проверити да ли у низу
нема елемента са одређеном вредношћу. Хајде
да почнемо.
Хајде да решимо следећи задатак: дат је низ
са бројевима, потребно је проверити да ли у њему
постоји елемент са вредношћу 3 или не. Ако
постоји - исписаћемо '+++', ако не -
исписаћемо '---'.
За почетак хајде да покушамо да испишемо '+++'.
Зато ћемо пребрати све елементе нашег низа
и помоћу if-а ћемо питати - да ли је тренутни
елемент једнак вредности 3. Ако јесте - исписаћемо
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Али наше решење није баш добро: јер ако
у низу буде не једна вредност 3,
а неколико, онда ће се '+++' исписати неколико
пута. Хајде да исправимо наш низ (направимо
два елемента са вредношћу 3) и да се уверимо у то:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // исписаће се неколико пута
}
}
?>
Поправићемо проблем: прекинућемо циклус помоћу
break, ако је елемент већ пронађен:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // завршићемо циклус
}
}
?>
Хајде сада да покушамо да урадимо тако да,
ако у низу уопште нема елемената са вредношћу
3, буде исписано '---'. Уобичајена
заблуда би била да се дода else
нашем if-у - у том случају ће се '---'
исписати за све елементе који нису
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // исписаће се на елементу 3
} else {
echo '---'; // исписаће се на елементима 1, 2, 4, 5
}
}
?>
Дакле, идеја да се дода else - лоша
идеја, не функционише. За решавање задатака оваквог
типа (овакви задаци се довољно често
срећу) користе се такозване заставе.
Као што је већ поменуто горе, застава је таква
променљива, која може да има две вредности:
true или false.
Дакле, хајде да направимо променљиву flag
са оваквом вредношћу: ако је једнака true,
онда у низу постоји елемент 3, а ако је
false, онда таквог елемента нема.
Иницијално ћемо поставити променљиву flag
на вредност false - то јест сматраћемо,
да елемента 3 у низу нема:
$arr = [1, 2, 3, 4, 5];
$flag = false; // сматрамо да елемента 3 нема у низу
Затим ћемо покренути циклус са if-ом онако како смо то радили
раније. Ако циклус открије да у низу
постоји елемент 3 - онда ћемо поставити променљиву flag
на вредност true и изаћи из циклуса
помоћу break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // сматрамо да елемента 3 нема у низу
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // елемент постоји - предефинисаћемо променљиву $flag
break; // изаћи ћемо из циклуса
}
}
?>
Одговор на питање, да ли у низу постоји 3
или не, можемо дати тек након циклуса.
И тај одговор већ имамо: након циклуса
променљива flag је могла да остане false
или је могла да промени своју вредност на true,
ако је циклус открио у низу 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// овде променљива $flag је једнака или true, или false
?>
Сада након циклуса можемо направити if, који ће
погледати на променљиву flag и исписати
на екран '+++' или '---':
<?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 '---';
}
?>
Дат је низ:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Проверите да ли у овом низу постоји елемент
'c'. Ако постоји - испишите '+++',
а ако не - испишите '---'.
Напишите код, који ће проверавати број да ли је прост или није. Прост број се дели само са јединицом и сам са собом, и не дели се са другим бројевима.