PHP-ում դրոշների հետ աշխատանք

Այժմ մենք կսովորենք աշխատել դրոշների հետ: Դրոշը հատուկ փոփոխական է, որը կարող է ընդունել միայն երկու արժեք՝ true և false: Դրոշների օգնությամբ կարելի է լուծել այնպիսի խնդիրներ, որոնք ստուգում են որևէ բանի բացակայությունը. Օրինակ, կարելի է ստուգել, որ զանգվածում չկա տարր որոշակի արժեքով: Եկեք սկսենք:

Եկեք լուծենք հետևյալ խնդիրը. տրված է թվերով զանգված, պետք է ստուգել, արդյոք կա դրանում 3 արժեքով տարր, թե ոչ: Եթե կա - արտածենք '+++', եթե ոչ - արտածենք '---':

Սկզբում եկեք փորձենք արտածել '+++': Դրա համար կփոխենք մեր զանգվածի բոլոր տարրերը և պայմանի օպերատորով կստուգենք - արդյոք ընթացիկ տարրը հավասար է 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 արժեքով տարրեր, արտածվի '---': Տարածված սխալ կլինի ավելացնել 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 տարրը չկա զանգվածում

Այնուհետև կգործարկենք ցիկլ պայմանի օպերատորով, ինչպես դա արել էինք նախկինում: Եթե ցիկլը հայտնաբերի, որ զանգվածում կա 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
?>

Այժմ, ցիկլից հետո, մենք կարող ենք գրել պայմանի օպերատոր, որը կնայի 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

Գրեք կոդ, որը կստուգի թիվը՝ արդյոք այն պարզ է, թե ոչ. Պարզ թիվը բաժանվում է միայն մեկի և ինքն իր վրա, և չի բաժանվում այլ թվերի վրա.