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
$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
$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
$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
$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:
$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
$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
$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
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo '+++';
} else {
echo '---';
}
?>
Dots masīvs:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Pārbaudiet, vai šajā masīvā ir elements
'c'. Ja ir - izvadiet '+++',
ja nav - izvadiet '---'.
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.