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.

dövr operatoru

Yuxarıdakı şəkildən də göründüyü kimi şərt yoxlanılır, nəticəsi trueolduqda 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ı:

  1. İ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
  2. Sonra şərt (1 <= 20) yoxlanılır, şərt doğrudur (true) və dövr öz işinə davam edir
  3. 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)
  4. 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
  5. Yenidən şərt (2 <= 20) yoxlanılır, şərt doğrudur və dövr öz işinə davam edir
  6. 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
  7. İterasiyanın sonunda $i dəyişəninin qiyməti bir vahid artır və 3-ə bərabər olur
  8. 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əsi false 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-whileswitch 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.

0
Çalışmalara (4) giriş əldə etmək üçün hesabınıza daxil olun.

Şərh yazmaq üçün hesabınıza daxil olun.