Vėliavų naudojimas PHP

Dabar mes išmoksime dirbti su vėliavomis. Vėliava - tai specialus kintamasis, kuris gali įgyti tik dvi reikšmes: true ir false. Naudojant vėliavas galima spręsti uždavinius, kurie tikrina ko nors nebuvimą: pavyzdžiui, galima patikrinti, ar masyve nėra elemento su tam tikra reikšme. Pradėkime.

Išspręskime tokį uždavinį: duotas masyvas su skaičiais, reikia patikrinti, ar jame yra elementas su reikšme 3, ar ne. Jei yra - išveskime '+++', jei nėra - išveskime '---'.

Pirmiausia pabandykime išvesti '+++'. Norėdami tai padaryti, pereisime per visus mūsų masyvo elementus ir su if sakiniu tikrinsime - ar dabartinis elementas lygus reikšmei 3. Jei lygus - išveskime '+++':

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

Bet mūsų sprendimas nėra labai geras: jei masyve bus ne viena reikšmė 3, o kelios, tai '+++' bus išvesta kelis kartus. Pakeiskime mūsų masyvą (padarykime du elementus su reikšme 3) ir tuo įsitikinkime:

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

Ištaisykime problemą: užbaikime ciklą naudodami break, jei elementas jau rastas:

php<?php
  $arr = [1, 2, 3, 4, 3, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++';
      break;  // užbaigiame ciklą
    }
  }
?>

Dabar pabandykime padaryti taip, kad, jei masyve išvis nėra elementų su reikšme 3, būtų išvesta '---'. Dažnas klaidingas sprendimas būtų pridėti else prie mūsų if sakinio - tokiu atveju '---' bus išvesta visiems elementams, kurie nėra 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++'; // išves ant elemento 3
    } else {
      echo '---'; // išves ant elementų 1, 2, 4, 5
    }
  }
?>

Taigi, idėja pridėti else - bloga idėja, neveikianti. Tokio tipo uždaviniams spręsti (tokie uždaviniai pasitaiko pakankamai dažnai) ir naudojamos vadinamosios vėliavos.

Kaip jau minėta anksčiau, vėliava - tai toks kintamasis, kuris gali įgyti dvi reikšmes: true arba false.

Taigi, padarykime kintamąjį flag su tokia reikšme: jei jis lygus true, tai masyve yra elementas 3, o jei false, tokio elemento nėra.

Iš pradžių nustatykime kintamąjį flag į reikšmę false - tai reiškia, kad laikysime, kad elemento 3 masyve nėra:

javascript$arr = [1, 2, 3, 4, 5];
$flag = false; // manome, kad elemento 3 nėra masyve

Tada paleiskime ciklą su if sakiniai taip, kaip mes darėme anksčiau. Jei ciklas aptiks, kad masyve yra elementas 3 - tai nustatysime kintamąjį flag į reikšmę true ir išeisime iš ciklo naudodami break:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false; // manome, kad elemento 3 nėra masyve
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true; // elementas yra - perapibrėžsime kintamąjį $flag
      break; // išeisime iš ciklo
    }
  }
?>

Atsakymą į klausimą, ar masyve yra 3, ar ne, galime duoti tik po ciklo. Ir šį atsakymą mes jau turime: po ciklo kintamasis flag galėjo likti false arba galėjo pakeisti savo reikšmę į true, jei ciklas aptiko masyve 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false;
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true;
      break;
    }
  }
  
  // čia kintamasis $flag lygus arba true, arba false
?>

Dabar po ciklo mes galime padaryti if sakinį, kuris pažiūrės į kintamąjį flag ir išves į ekraną '+++' arba '---':

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

Duotas masyvas:

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

Patikrinkite, ar šiame masyve yra elementas 'c'. Jei yra - išveskite '+++', o jei nėra - išveskite '---'.

Задание 2

Parašykite kodą, kuris tikrins skaičių, ar jis yra pirminis, ar ne. Pirminis skaičius dalijasi tik iš vieneto ir iš savęs, ir nesidalija iš kitų skaičių.