PHPда флаглар билан ишлаш
Ҳозир биз флаглар билан ишлашни ўрганамиз.
Флаг - бу фақат икки қиймат қабул қиладиган
махсус ўзгарувчи бўлиб, у true
ва false бўлиши мумкин. Флаглар ёрдамида
бирор нарсанинг йўқлигини текширадиган
масалаларни ечиш мумкин:
масалан, массивда маълум қийматли элемент
йўқлигини текшириш мумкин. Келгила, бошлаймиз.
Келгила, куйидаги масалани ечайлик: сонлардан
ташкил топган массив берилган бўлиб, унда
3 қийматли элемент бор-йўқлигини текшириш керак.
Агар бор бўлса - '+++' чиқаринг,
йўқ бўлса - '---' чиқаринг.
Бошлаш учун келгила, '+++' чиқаришга ҳаракат қилайлик.
Бунинг учун биз массивимизнинг ҳамма элементларини
айланиб чиқамиз ва иф орқали ҳар бир элемент
3 қийматга тенг-йўқлигини сўраймиз.
Агар тенг бўлса - '+++' чиқарамиз:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Aммо бизнинг ечимимиз жуда яхши эмас: чунки
агар массивда битта 3 қиймат эмас,
бир нечта бўлса, '+++' бир неча марта
чиқади. Келгила, массивимизни ўзгартирамиз (иккита
3 қийматли элемент қиламиз) ва буни ишонч билан кўрамиз:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // бир неча марта чиқади
}
}
?>
Муаммони тузатамиз: агар элемент топилган бўлса,
break ёрдамида циклни тугатамиз:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // циклни тугатамиз
}
}
?>
Энди келгила, массивда умуман 3 қийматли элемент
йўқ бўлса, '---' чиқариладиган қилиб кўрайлик.
Таниш нотўғри усул - бу бизнинг ифимизга
else қўшиш - бу ҳолда '---'
3 бўлмаган ҳамма элементлар учун чиқади:
<?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
элементи йўқ деб ҳисоблаймиз:
$arr = [1, 2, 3, 4, 5];
$flag = false; // массивда 3 элементи йўқ деб ҳисоблаймиз
Сўнгра биз аввал қилганимиздек циклни иф билан ишга туширамиз.
Агар цикл массивда 3 элементи борлигини аниқласа - flag
ўзгарувчисини true қийматига ўзгартирамиз
ва break ёрдамида циклдан чиқамиз:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // массивда 3 элементи йўқ деб ҳисоблаймиз
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // элемент бор - $flag ўзгарувчисини қайта таърифлаймиз
break; // циклдан чиқамиз
}
}
?>
Массивда 3 бор-йўқлиги ҳақидаги саволга жавоб
биз фақат циклдан кейингина бера оламиз.
Ва бу жавоб бизда аллақачон мавжуд: циклдан кейин
flag ўзгарувчиси false бўлиб қолиши
ёки агар цикл массивда 3 топган бўлса, true
қийматига ўзгариши мумкин:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// бу ерда $flag ўзгарувчиси true ёки false га тенг
?>
Энди циклдан кейин биз flag ўзгарувчисига қарайдиган
ифни қила оламиз, ва экранга '+++' ёки '---' ни чиқара оламиз:
<?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 '---';
}
?>
Массив берилган:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Бу массивда 'c' элементи борлигини текширинг.
Агар бор бўлса - '+++' чиқаринг,
йўқ бўлса - '---' чиқаринг.
Соннинг туб ёки туб эмаслигини текширадиган код ёзинг. Туб сон фақат бирга ва ўзига бўлинади, бошқа сонларга бўлинмайди.