Работа з флагомі ў 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; // элемент ёсць - перавызначым зменную $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'. Калі ёсць - выведзіце '+++',
а калі няма - выведзіце '---'.
Напішыце код, які будзе правяраць лік на тое, просты яно ці не. Просты лік дзеліцца толькі на адзінку і на само сябе, і не дзеліцца на іншыя лікі.