Работа со знамиња во PHP
Сега ќе научиме како да работиме со знамиња.
Знаме - тоа е специјална променлива која
може да има само две вредности: true
и false. Со помош на знамиња може да се решаваат
задачи кои проверуваат отсуство на нешто:
на пример, може да се провери дали во низата
нема елемент со одредена вредност. Да
започнеме.
Да ја решиме следната задача: дадена е низа
со броеви, треба да се провери дали во неа
има елемент со вредност 3 или не. Ако
има - ќе испечатиме '+++', ако нема -
ќе испечатиме '---'.
За почеток да се обидеме да испечатиме '+++'.
За ова ќе ги поминеме сите елементи на нашата низа
и со услов ќе прашаме - дали тековниот
елемент е еднаков на вредноста 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 на
нашиот услов - во тој случај '---' ќе
се печати за сите елементи кои не се
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 го нема во низата
Потоа ќе започнеме циклус со услов како што правевме
тоа порано. Ако циклусот открие дека во низата
има елемент 3 - тогаш ќе ја поставиме променливата flag
на вредност true и ќе излеземе од циклусот
со помош на break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // сметаме дека елементот 3 го нема во низата
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // елементот постои - ја reдефинираме променливата $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
?>
Сега по циклусот можеме да направиме услов, кој
ќе ја погледне променливата 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'. Ако има - испечатете '+++',
а ако нема - испечатете '---'.
Напишете код кој ќе проверува број дали е прост или не. Прост број се дели само на единица и на самиот себе, и не се дели на други броеви.