Kufanya Kazi na Bendera katika PHP
Hivi sasa tutajifunza kufanya kazi na bendera.
Bendera ni tofauti maalum ambayo
inaweza kuchukua thamani mbili tu: true
na false. Kwa kutumia bendera unaweza kutatua
kazi zinazohitaji kukagua kutokuwepo kwa kitu:
Kwa mfano, unaweza kukagua ikiwa kuna kipengele
na thamani fulani katika safu (array).
Wacha tuanze.
Wacha tutatue kazi ifuatayo: tuna safu ya nambari,
unahitaji kukagua ikiwa kuna kipengele
na thamani 3 ndani yake au la. Ikiwa
kipo - tutaweka '+++', ikiwa hakipo -
tutaweka '---'.
Kwanza, wacha tujaribu kuweka '+++'.
Ili kufanya hivyo, tutapitia vipengele vyote vya safu yetu
na kwa kutumia 'if' tutauliza - je, kipengele cha sasa
ni sawa na thamani 3? Ikiwa ni sawa - tutaweka
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Lakini ufumbuzi wetu sio mzuri sana: kwani ikiwa
safu itakuwa na thamani 3 si moja tu,
lakini kadhaa, basi '+++' itawekwa mara kadhaa.
Wacha turekebishe safu yetu (tufanye
vipelekezi viwili na thamani 3) na tukae hakika na jambo hili:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // itawekwa mara kadhaa
}
}
?>
Wacha tusahihishe tatizo: tutamaliza kitanzi kwa kutumia
break, ikiwa kipengele tayari kimepatikana:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // tamaliza kitanzi
}
}
?>
Wacha sasa tujaribu kufanya ili,
ikiwa hakuna vipengele vyovyote na thamani
3 kwenye safu, iweke '---'. Hitilafu ya kawaida
itakuwa kuongeza else kwenye
'if' yetu - kwa hali hii '---'
itawekwa kwa vipengele vyote visivyo
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // itawekwa kwenye kipengele 3
} else {
echo '---'; // itawekwa kwenye vipelekezi 1, 2, 4, 5
}
}
?>
Kwa hivyo, wazo la kuongeza else - ni wazo baya,
haliifanyi kazi. Ili kutatua kazi za aina hii
(kazi kama hizi hupatikana mara kwa mara) hutumia kinachojulikana kama bendera.
Kama tulivyoeleza hapo juu, bendera ni tofauti
ya namna hiyo, ambayo inaweza kuchukua thamani mbili:
true au false.
Basi, wacha tufanye tofauti flag
na thamani kama ifuatavyo: ikiwa ni sawa na true,
basi kuna kipengele 3 kwenye safu, na ikiwa
ni false, basi hakuna kipengele kama hicho.
Mwanzoni weka tofauti flag
kuwa na thamani false - yaani tutaona kwamba,
hakuna kipengele 3 kwenye safu:
$arr = [1, 2, 3, 4, 5];
$flag = false; // tunaona kwamba hakuna kipengele 3 kwenye safu
Kisha tutaanzisha kitanzi na 'if' kama tulivyofanya
hapo awali. Ikiwa kitanzi kitagundua kuwa kwenye safu
kuna kipengele 3 - basi tunaweka tofauti flag
kuwa na thamani true na tutatoka kwenye kitanzi
kwa kutumia break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // tunaona kwamba hakuna kipengele 3 kwenye safu
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // kipengele kipo - badilisha thamani ya tofauti $flag
break; // toka kwenye kitanzi
}
}
?>
Jibu la swali, ikiwa kuna 3 kwenye safu
au la, tunaweza kutoa tu baada ya kitanzi.
Na jibu hilo tayari tumelipata: baada ya kitanzi
tofauti flag inaweza kubaki false
au inaweza kubadilisha thamani yake kuwa true,
ikiwa kitanzi kiligundua 3 kwenye safu:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// hapa tofauti $flag ni sawa na true, au false
?>
Sasa baada ya kitanzi, tunaweza kuweka 'if', ambao
utaangalia tofauti flag na utaweka
'+++' au '---' kwenye skrini:
<?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 '---';
}
?>
Tuna safu:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Kagua ikiwa kwenye safu hii kuna kipengele
'c'. Ikiwa kipo - weka '+++',
na ikiwa hakipo - weka '---'.
Andika msimbo ambao utakagua nambari ikiwa ni ya kwanza au la. Nambari ya kwanza inagawanyika tu kwa moja na yenyewe, na haigawanyiki kwa nambari zingine.