Парчамҳо дар 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

Рамзеро нависед, ки ададеро бар он санҷад, ки содда аст ё не. Адади содда танҳо ба як ва ба худи худ тақсим мешавад, ва ба дигар ададҳо тақсим намешавад.