PHPда флаглар билан ишлаш

Ҳозир биз флаглар билан ишлашни ўрганамиз. Флаг - бу фақат икки қиймат қабул қиладиган махсус ўзгарувчи бўлиб, у true ва false бўлиши мумкин. Флаглар ёрдамида бирор нарсанинг йўқлигини текширадиган масалаларни ечиш мумкин: масалан, массивда маълум қийматли элемент йўқлигини текшириш мумкин. Келгила, бошлаймиз.

Келгила, куйидаги масалани ечайлик: сонлардан ташкил топган массив берилган бўлиб, унда 3 қийматли элемент бор-йўқлигини текшириш керак. Агар бор бўлса - '+++' чиқаринг, йўқ бўлса - '---' чиқаринг.

Бошлаш учун келгила, '+++' чиқаришга ҳаракат қилайлик. Бунинг учун биз массивимизнинг ҳамма элементларини айланиб чиқамиз ва иф орқали ҳар бир элемент 3 қийматга тенг-йўқлигини сўраймиз. Агар тенг бўлса - '+++' чиқарамиз:

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

Aммо бизнинг ечимимиз жуда яхши эмас: чунки агар массивда битта 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 бўлиб қолиши ёки агар цикл массивда 3 топган бўлса, true қийматига ўзгариши мумкин:

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

Соннинг туб ёки туб эмаслигини текширадиган код ёзинг. Туб сон фақат бирга ва ўзига бўлинади, бошқа сонларга бўлинмайди.