PHP
Dövr operatorları
"learn-php" qovluğunun içərisində "loops.php" faylı yaradırıq. Bu dərsdəki bütün nümunələri həmin fayla əlavə edib yoxlaya bilərsiniz.
Dövr operatorları şərtdən asılı olaraq proqramın müəyyən hissəsini təyin edilmiş sayda təkrar icra etməyə imkan verir. Məsələn, 1-dən 10-dək olan ədədləri ekranda göstərmək lazımdır. Bu çalışmanı indiyədək öyrəndiklərimiz sayəsində aşağıdakı kimi həll edə bilərik:
<?php
error_reporting(-1);
echo "1<br>";
echo "2<br>";
echo "3<br>";
echo "4<br>";
echo "5<br>";
echo "6<br>";
echo "7<br>";
echo "8<br>";
echo "9<br>";
echo "10<br>";
Bəs əgər yuxarıdakı çalışmanın şərti 1-dən 1000-dək natural ədədlər içərisindən həm 3-ə, həm də 5-ə bölünən ədədləri tapmaq olsaydı? Məhz bu kimi hallarda dövr operatorları köməyimizə gəlir.
while dövr operatoru
Yazılış sintaksisi aşağıdakı kimidir:
<?php
while (şərt) {
hər hansı əməliyyat;
}
Dövrlərin sayı əvvəlcədən məlum olmadıqda while
operatorundan istifadə edilir.
Yuxarıdakı şəkildən də göründüyü kimi şərt yoxlanılır, nəticəsi true
olduqda fiqurlu mötərizənin içərisində olan kod icra olunur. Bundan sonra PHP interpretatoru yenidən şərti yoxlayır, nəticəsi true
-dursa, yenidən fiqurlu mötərizənin içərisində olan kod icra olunur. Şərtin nəticəsi false
olduqda isə dövr bitir.
Gəlin bu dərsin əvvəlindəki çalışmanı while
dövr operatorunun köməyilə həll edək:
<?php
error_reporting(-1);
$i = 1;
$limit = 10;
while ($i <= $limit) {
echo $i . ' ';
$i++;
}
Nəticə:
1 2 3 4 5 6 7 8 9 10
Əvvəlcə $i
dəyişəninə 1, $limit
dəyişəninə isə 10 tam ədədlərini mənimsədirik. Dairəvi mötərizənin içərisindəki şərt ($i <= 10
) doğru (true
) olanadək fiqurlu mötərizə daxilində olan kod icra edilir. Yəni hər iterasiyada $i
dəyişəninin qiyməti ekrana çıxarılır, sonra $i
dəyişəninin qiyməti bir vahid (+1) artılır. Bundan sonra interpretator yenidən şərti yoxlayır. $i
dəyişənin qiyməti 11 olduqda şərtin nəticəsi yalan (false
) olur və dövr bitir.
Gəlin başqa bir çalışma həll edək: verilmiş ədəd 0 olanadək iterasiyaların sayını hesablayın. Hər bir iterasiyada cari ədədin cüt və ya tək olması yoxlanılır. Əgər cüt ədəddirsə, 2-yə bölünür, yox əgər tək ədəddirsə, bir vahid azaldılır. Aşağıda daha ətraflı izah edilir:
21 ədədi verilib. Tək ədəddir.
İzah:
1) 21 - 1 = 20
2) 20 / 2 = 10
3) 10 / 2 = 5
4) 5 - 1 = 4
5) 4 / 2 = 2
6) 2 / 2 = 1
7) 1 - 1 = 0
Göründüyü kimi bizim nümunəmizdə 7 iterasiya lazım oldu.
Çalışmanın kodu aşağıdakı kimidir:
<?php
error_reporting(-1);
$num = 21;
$steps = 0;
while ($num) {
if ($num % 2 === 0) {
$num /= 2;
} else {
$num -= 1;
}
$steps++;
}
echo $steps;
Nəticə:
7
Məsələn, əgər yuxarıdakı kodda $num
dəyişəninin qiymətini dəyişib 16 etsək, iterasiyaların sayı 5-ə bərabər olacaq.
Yuxarıdakı nümunədən göründüyü kimi while
dövr operatorunun içərisində if
şərt operatoru istifadə edilib. Həmçinin bir dövr operatorunun içərisində digər dövr operatorunu istifadə etmək olar.
do ... while dövr operatoru
do ... while
dövr operatorundan istifadə zamanı şərt iterasiyanın əvvəlində deyil, sonunda yoxlanlır, buna görə dövrün içərisindəki kod ən azı bir dəfə icra olunur. Yazılış sintaksisi aşağıdakı kimidir:
<?php
do {
hər hansı əməliyyat;
} while (şərt)
Aşağıdakı şəkil do ... while
dövr operatorunun işləmə prinsipini izah edir:
Gəlin aşağıdakı nümunəyə diqqət yetirək:
<?php
error_reporting(-1);
$i = 1;
do {
echo $i;
$i++;
} while ($i > 5);
Nəticə:
1
Yuxarıdakı nümunədə əvvəlcə fiqurlu mötərizənin içərisindəki kod icra edilir və nəticə ekranda çap edilir, sonra şərt ($i > 5
) yoxlanılır. Şərt yalan (false
) olduğuna görə dövr bitir. Əgər şərt doğru (true
) olsaydı, dövr öz işinə davam edərdi.
for dövr operatoru
PHP proqramlaşdırma dilində nisbətən çətin dövr operatorudur, yazılış sintaksisi aşağıdakı kimidir:
<?php
for (sayğac; şərt; iterator) {
hər hansı əməliyyat;
}
- sayğac - ilk öncə sayğacın başlanğıc qiyməti təyin edilir. Bu kod birinci iterasiyadan öncə yalnız bir dəfə icra olunur
- şərt - hər iterasiyanın əvvəlində yoxlanılır, şərtin nəticəsi
true
olduqda, dövr öz işinə davam edir və kod icra olunur,false
olduqda isə dövr bitir - iterator - hər iterasiyanın sonunda sayğacın qiymətini dəyişir
Aşağıdakı şəkil for
dövr operatorunun işləmə prinsipini izah edir:
Gəlin for
dövr operatorunun köməyilə 1-dən 21-dək olan ədədlər arasından cüt ədədləri ekranda çap edən skript yazaq:
<?php
error_reporting(-1);
for ($i = 1; $i <= 20; $i++) {
if ($i % 2 === 0) {
echo $i . ' ';
}
}
Nəticə:
2 4 6 8 10 12 14 16 18 20
Yuxarıdakı nümunənin izahı:
- İlk öncə sayğacın başlanğıc qiymətini təyin edirik, yəni
$i
dəyişəninə 1 qiymətini mənimsədirik - Sonra şərt (
1 <= 20
) yoxlanılır, şərt doğrudur (true
) və dövr öz işinə davam edir for
dövr operatorunun içərsindəif
şərt operatoru istifadə edilib. Bildiyimiz kimi, cüt ədədlər 2-yə qalıqsız bölünür, deməli yalnız bu halda şərt doğru olur və cüt ədəd ekranda çap edilir. Birinci iterasiyada$i
dəyişəninin qiyməti 1-ə bərabərdir, 1 ədədi isə 2-yə tam bölünmür və qalıq 1-ə bərabərdir. Deməli, şərt yalandır (false
)- Hər iterasiyanın sonunda
$i
dəyişəninin qiyməti bir vahid artır ($i++
). Buna görə ikinci iterasiyada$i
dəyişəninin qiyməti 2-yə bərabər olur - Yenidən şərt (
2 <= 20
) yoxlanılır, şərt doğrudur və dövr öz işinə davam edir - 2 ədədi 2-yə tam bölünür və qalıq 0-a bərabərdir. Deməli, şərt doğrudur və 2 ədədi ekranda çap edilir
- İterasiyanın sonunda
$i
dəyişəninin qiyməti bir vahid artır və 3-ə bərabər olur - Bu minvalla şərt doğru olana kimi dövr öz işinə davam edir və cüt ədədləri ekranda çap edir.
$i
dəyişəninin qiyməti 21 olduqda isə şərtin nəticəsifalse
olur və dövr sona çatır
break
break
əmri vasitəsilə dövrün işini dayandırmaq mümkündür. break
əmri for
, foreach
, while
, do-while
və switch
operatorları ilə birgə istifadə edilə bilər. Məsələn, aşağıdakı nümunə 1-dən 10-dək olan ədədləri ekranda çap edir:
<?php
error_reporting(-1);
for ($i = 1; $i < 10; $i++) {
echo $i . ' ';
}
Nəticə:
1 2 3 4 5 6 7 8 9
İndi isə gəlin $i
dəyişəninin qiyməti 5-ə bərabər olduqda dövrün işini dayandıraq:
<?php
for ($i = 1; $i < 10; $i++) {
if ($i === 5) {
break;
}
echo $i . ' ';
}
Nəticə:
1 2 3 4
continue
continue
əmri cari iterasiyanın icrasını dayandırır və növbəti iterasiyaya keçidi təmin edir. Daha yaxşı başa düşmək üçün aşağıdakı nümunəyə baxaq:
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 === 0) {
continue;
}
echo $i . ' ';
}
Nəticə:
1 3 5 7 9
Yuxarıdakı nümunədə yalnız 2-yə tam bölünməyən ədədlər ekranda çap edilir. $i
dəyişəninin qiyməti 2-yə qalıqsız bölündükdə continue
əmri vasitəsilə növbəti iterasiyaya keçid təmin edilir.
Şərh yazmaq üçün hesabınıza daxil olun.