ფლაგებთან მუშაობა PHP-ში

ახლა ჩვენ ვისწავლით თუ როგორ ვიმუშაოთ ფლაგებთან. ფლაგი არის სპეციალური ცვლადი, რომელსაც შეუძლია მიიღოს მხოლოდ ორი მნიშვნელობა: true და false. ფლაგების საშუალებით შესაძლებელია ამოცანების ამოხსნა, რომლებიც ამოწმებენ რაიმეს არარსებობას: მაგალითად, შეგვიძლია შევამოწმოთ, რომ მასივში არ არის ელემენტი გარკვეული მნიშვნელობით. მოდით დავიწყოთ.

მოდით ამოვხსნათ შემდეგი ამოცანა: მოცემულია მასივი რიცხვებით, საჭიროა შევამოწმოთ, არის თუ არა მასში ელემენტი 3 მნიშვნელობით თუ არა. თუ არის - გამოვიტანოთ '+++', თუ არა - გამოვიტანოთ '---'.

პირველ რიგში მოდით ვცადოთ '+++'-ის გამოტანა. ამისთვის გადავუყვებით ჩვენი მასივის ყველა ელემენტს და if-ით შევამოწმებთ - უდრის თუ არა მიმდინარე ელემენტი 3 მნიშვნელობას. თუ უდრის - გამოვიტანთ '+++'-ს:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++';
    }
  }
?>

მაგრამ ჩვენი ამოხსნა არც ისე კარგია: ხომ თუ მასივში იქნება არა ერთი მნიშვნელობა 3, არამედ რამდენიმე, მაშინ '+++' რამდენჯერმე გამოიტანება. მოდით შევცვალოთ ჩვენი მასივი (გავაკეთოთ ორი ელემენტი 3 მნიშვნელობით) და დავრწმუნდეთ ამაში:

php<?php
  $arr = [1, 2, 3, 4, 3, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++'; // გამოიტანება რამდენჯერმე
    }
  }
?>

მოდით გამოვასწოროთ პრობლემა: დავასრულოთ ციკლი break-ის საშუალებით, თუ ელემენტი უკვე მოიძებნა:

php<?php
  $arr = [1, 2, 3, 4, 3, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++';
      break;  // დავასრულოთ ციკლი
    }
  }
?>

მოდით ახლა ვცადოთ ისე მოვიქცეთ, რომ, თუ მასივში საერთოდ არ არის ელემენტი 3 მნიშვნელობით, გამოიტანოს '---'. გავრცელებული შეცდომა იქნება ჩვენს if-ს დავუმატოთ else - ამ შემთხვევაში '---' გამოიტანება ყველა იმ ელემენტზე, რომელიც არ არის 3:

php<?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 მასივში არ არის:

javascript$arr = [1, 2, 3, 4, 5];
$flag = false; // ვთვლით, რომ ელემენტი 3 არ არის მასივში

შემდეგ გავუშვებთ ციკლს if-ით ისე, როგორც ადრე ვაკეთებდით. თუ ციკლი აღმოაჩენს, რომ მასივში არის ელემენტი 3 - მაშინ დავსვათ ცვლადი flag true მნიშვნელობაზე და გამოვიდეთ ციკლიდან break-ის საშუალებით:

php<?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<?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<?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 '---';
  }
?>
Задание 1

მოცემულია მასივი:

php<?php
  $arr = ['a', 'b', 'c', 'd', 'e'];
?>

შეამოწმეთ, რომ ამ მასივში არის ელემენტი 'c'. თუ არის - გამოიტანეთ '+++', ხოლო თუ არა - გამოიტანეთ '---'.

Задание 2

დაწერეთ კოდი, რომელიც შეამოწმებს რიცხვს იმაზე, მარტივია ის თუ არა. მარტივი რიცხვი იყოფა მხოლოდ ერთზე და საკუთარ თავზე, და არ იყოფა სხვა რიცხვებზე.