Парчамҳо дар PHP
Акнун мо меомӯзем, ки чӣ тавр бо парчамҳо кор кардан лозим.
Парчам - ин тағйирёбандаи махсус аст, ки
метавонад фақат ду қимат қабул кунад: true
ва false. Бо ёрии парчамҳо метавон
масъалаҳоеро ҳал кард, ки набудани чизеро
санҷед:
масалан, метавон санҷид, ки дар массив
унсуре бо қимати муайян нест. Биёед
оғоз кунем.
Биёед масъалаи зеринро ҳал кунем: массиви
ададҳо дода шудааст, лозим аст санҷед, ки дар он
унсуре бо қимати 3 ҳаст ё не. Агар
ҳаст - '+++'-ро чоп кунем, агар
нест -
'---'-ро чоп кунем.
Аввалан биёед кӯшиш кунем, ки '+++'-ро чоп кунем.
Барои ин ҳама унсурҳои массиви худро
такрор мекунем ва бо шарт мепурсем - оё унсури кунунӣ
ба қимати 3 баробар аст? Агар баробар аст - '+++'-ро
чоп кунем:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Аммо ҳалли мо хеле хуб нест: чунки агар
дар массив як қимати 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 боқӣ монда бошад
ё метавонист қимати худро ба true тағйир диҳад,
агар сикл дар массив 3-ро мушоҳида карда бошад:
<?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' ҳаст ё не. Агар ҳаст - '+++'-ро чоп кунед,
ва агар нест - '---'-ро чоп кунед.
Рамзеро нависед, ки ададеро бар он санҷад, ки содда аст ё не. Адади содда танҳо ба як ва ба худи худ тақсим мешавад, ва ба дигар ададҳо тақсим намешавад.