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' տարր.
Եթե կա - արտածեք '+++',
իսկ եթե չկա - արտածեք '---'.
Գրեք կոդ, որը կստուգի թիվը՝ արդյոք այն պարզ է, թե ոչ. Պարզ թիվը բաժանվում է միայն մեկի և ինքն իր վրա, և չի բաժանվում այլ թվերի վրա.