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

Санды жай сан ба, жоқ па екенін тексеретін код жазыңыз. Жай сан тек бірге және өзіне ғана бөлінеді, және басқа сандарға бөлінбейді.