Praca z flagami w PHP

Teraz nauczymy się pracować z flagami. Flaga to specjalna zmienna, która może przyjmować tylko dwie wartości: true i false. Za pomocą flag można rozwiązywać zadania sprawdzające brak czegoś: na przykład można sprawdzić, że w tablicy nie ma elementu o określonej wartości. Zaczynajmy.

Rozwiążmy następujące zadanie: dana jest tablica z liczbami, należy sprawdzić, czy znajduje się w niej element o wartości 3 czy nie. Jeśli tak - wypiszemy '+++', jeśli nie - wypiszemy '---'.

Na początku spróbujmy wypisać '+++'. W tym celu przeiterujemy po wszystkich elementach naszej tablicy i za pomocą instrukcji if będziemy pytać - czy bieżący element jest równy wartości 3. Jeśli tak - wypiszemy '+++':

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

Ale nasze rozwiązanie nie jest zbyt dobre: bo jeśli w tablicy będzie nie jedna wartość 3, a kilka, to '+++' wypisze się kilka razy. Zmodyfikujmy naszą tablicę (stwórzmy dwa elementy o wartości 3) i przekonajmy się o tym:

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

Poprawmy problem: zakończmy pętlę za pomocą break, jeśli element został już znaleziony:

php<?php
  $arr = [1, 2, 3, 4, 3, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++';
      break;  // kończymy pętlę
    }
  }
?>

Spróbujmy teraz zrobić tak, aby, jeśli w tablicy w ogóle nie ma elementów o wartości 3, wypisywało się '---'. Powszechnym błędem będzie dodanie else do naszej instrukcji if - w tym przypadku '---' będzie wypisywane dla wszystkich elementów, które nie są równe 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++'; // wypisze się na elemencie 3
    } else {
      echo '---'; // wypisze się na elementach 1, 2, 4, 5
    }
  }
?>

A zatem, pomysł z dodaniem else - jest złym pomysłem, nie działającym. Do rozwiązywania zadań tego typu (takie zadania spotyka się dość często) używa się tak zwanych flag.

Jak już wspomniano wyżej, flaga - to taka zmienna, która może przyjmować dwie wartości: true lub false.

A zatem, stwórzmy zmienną flag o takim znaczeniu: jeśli jest równa true, to w tablicy znajduje się element 3, a jeśli false, to takiego elementu nie ma.

Początkowo ustawmy zmienną flag na wartość false - to znaczy będziemy uważać, że elementu 3 nie ma w tablicy:

javascript$arr = [1, 2, 3, 4, 5];
$flag = false; // uważamy, że elementu 3 nie ma w tablicy

Następnie uruchomimy pętlę z instrukcją if tak, jak robiliśmy to wcześniej. Jeśli pętla wykryje, że w tablicy znajduje się element 3 - to ustawimy zmienną flag na wartość true i wyjdziemy z pętli za pomocą break:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false; // uważamy, że elementu 3 nie ma w tablicy
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true; // element jest - przedefiniujemy zmienną $flag
      break; // wyjdziemy z pętli
    }
  }
?>

Odpowiedź na pytanie, czy w tablicy znajduje się 3 czy nie, możemy dać dopiero po pętli. I tę odpowiedź już mamy: po pętli zmienna flag mogła pozostać false lub mogła zmienić swoją wartość na true, jeśli pętla wykryła w tablicy 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false;
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true;
      break;
    }
  }
  
  // tutaj zmienna $flag jest równa albo true, albo false
?>

Teraz po pętli możemy zrobić instrukcję if, która spojrzy na zmienną flag i wypisze na ekran '+++' lub '---':

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

Dana jest tablica:

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

Sprawdź, czy w tej tablicy znajduje się element 'c'. Jeśli tak - wypisz '+++', a jeśli nie - wypisz '---'.

Задание 2

Napisz kod, który będzie sprawdzał liczbę pod kątem tego, czy jest pierwsza, czy nie. Liczba pierwsza dzieli się tylko przez jeden i przez samą siebie, i nie dzieli się przez inne liczby.