Flagstrādāšana PHP

Tagad mēs iemācīsimies strādāt ar flagiem. Flags ir īpašs mainīgais, kas var iegūt tikai divas vērtības: true un false. Ar flagu palīdzību var atrisināt uzdevumus, kas pārbauda kaut kā neesamību: piemēram, var pārbaudīt, vai masīvā nav elementa ar noteiktu vērtību. Sāksim.

Atrisināsim šādu uzdevumu: dots masīvs ar skaitļiem, jāpārbauda, vai tajā ir elements ar vērtību 3 vai nav. Ja ir - izvadīsim '+++', ja nav - izvadīsim '---'.

Sākumā mēģināsim izvadīt '+++'. Lai to izdarītu, iziesim cauri visiem masīva elementiem un ar if noskaidrosim - vai pašreizējais elements ir vienāds ar vērtību 3. Ja ir vienāds - izvadīsim '+++':

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

Bet mūsu risinājums nav īsti labs: jo, ja masīvā būs nevis viena vērtība 3, bet vairākas, tad '+++' tiks izvadīts vairākas reizes. Labosim mūsu masīvu (izveidosim divus elementus ar vērtību 3) un par to pārliecināsimies:

php<?php
  $arr = [1, 2, 3, 4, 3, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++'; // izvadīs vairākas reizes
    }
  }
?>

Izlabosim problēmu: pārtrauksim ciklu ar break, ja elements jau ir atrasts:

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

Tagad mēģināsim izdarīt tā, lai, ja masīvā vispār nav elementu ar vērtību 3, tiktu izvadīts '---'. Izplatīts pārpratums būs pievienot else mūsu if - šajā gadījumā '---' tiks izvadīts visiem elementiem, kas nav 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      echo '+++'; // izvadīs uz elementa 3
    } else {
      echo '---'; // izvadīs uz elementiem 1, 2, 4, 5
    }
  }
?>

Tātad, ideja pievienot else - slikta ideja, nedarbojas. Lai atrisinātu šāda veida uzdevumus (tādi uzdevumi sastopami pietiekami bieži) izmanto tā sauktos flagus.

Kā jau minēts iepriekš, flags - ir tāds mainīgais, kas var iegūt divas vērtības: true vai false.

Tātad, izveidosim mainīgo flag ar šādu nozīmi: ja tas ir vienāds ar true, tad masīvā ir elements 3, bet ja false, tad šāda elementa nav.

Sākotnēji iestatīsim mainīgo flag uz vērtību false - tas ir, pieņemsim, ka elementa 3 masīvā nav:

javascript$arr = [1, 2, 3, 4, 5];
$flag = false; // pieņemam, ka elementa 3 nav masīvā

Pēc tam palaidīsim ciklu ar if tā, kā mēs to darījām agrāk. Ja cikls atklās, ka masīvā ir elements 3 - tad iestatīsim mainīgo flag uz vērtību true un iziesim no cikla ar break:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false; // pieņemam, ka elementa 3 nav masīvā
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true; // elements ir - pārdefinēsim mainīgo $flag
      break; // iziesim no cikla
    }
  }
?>

Atbildi uz jautājumu, vai masīvā ir 3 vai nav, mēs varam dot tikai pēc cikla. Un šī atbilde mums jau ir: pēc cikla mainīgais flag varēja palikt false vai varēja mainīt savu vērtību uz true, ja cikls atklāja masīvā 3:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $flag = false;
  
  foreach ($arr as $elem) {
    if ($elem === 3) {
      $flag = true;
      break;
    }
  }
  
  // šeit mainīgais $flag ir vienāds ar true vai false
?>

Tagad pēc cikla mēs varam izveidot if, kurš paskatīsies uz mainīgo flag un izvadīs ekrānā '+++' vai '---':

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

Dots masīvs:

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

Pārbaudiet, vai šajā masīvā ir elements 'c'. Ja ir - izvadiet '+++', ja nav - izvadiet '---'.

Задание 2

Uzrakstiet kodu, kas pārbaudīs skaitli, vai tas ir pirmskaitlis vai nē. Pirmskaitlis dalās tikai ar vieninieku un pats ar sevi, un nedalās ar citiem skaitļiem.