ფლაგებთან მუშაობა 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
მნიშვნელობით, გამოიტანოს '---'. გავრცელებული
შეცდომა იქნება ჩვენს if-ს დავუმატოთ 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 არ არის მასივში
შემდეგ გავუშვებთ ციკლს 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'. თუ არის - გამოიტანეთ '+++',
ხოლო თუ არა - გამოიტანეთ '---'.
დაწერეთ კოდი, რომელიც შეამოწმებს რიცხვს იმაზე, მარტივია ის თუ არა. მარტივი რიცხვი იყოფა მხოლოდ ერთზე და საკუთარ თავზე, და არ იყოფა სხვა რიცხვებზე.