0%

🔁 Cikli PHP

Cikli ļauj atkārtoti izpildīt kodu. PHP piedāvā četrus ciklu veidus: for, while, do-while un foreach.

php

for cilpa

Izmanto, kad zini, cik reizes cilpa tiks izpildīta.

Teksts
<?php
// Pamata for cilpa
// for (sākums; nosacījums; solis)
for ($i = 1; $i <= 5; $i++) {
    echo "Skaitlis: $i<br>";
}
// 1, 2, 3, 4, 5

// Skaitīšana atpakaļ
for ($i = 10; $i >= 1; $i--) {
    echo "$i... ";
}
echo "Start!<br>";

// Par 2
for ($i = 0; $i <= 20; $i += 2) {
    echo "$i ";
}
echo "<br>"; // 0 2 4 6 8 10 12 14 16 18 20

// Reizināšanas tabula
echo "<table border='1'>"; 
for ($i = 1; $i <= 5; $i++) {
    echo "<tr>";
    for ($j = 1; $j <= 5; $j++) {
        echo "<td>" . ($i * $j) . "</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>

while cilpa

Izmanto, kad nezini iepriekš, cik reizes cilpa tiks izpildīta – turpina, kamēr nosacījums ir patiess.

Teksts
<?php
// Pamata while
$skaits = 1;
while ($skaits <= 5) {
    echo "Skaits: $skaits<br>";
    $skaits++;
}

// Ciparu summa līdz 100
$summa = 0;
$n = 1;
while ($summa + $n <= 100) {
    $summa += $n;
    $n++;
}
echo "Summa: $summa, pēdējais skaitlis: " . ($n - 1) . "<br>";

// Bieži while izmanto ar datubāzēm
// $stmt = $pdo->query("SELECT * FROM raksti");
// while ($rinda = $stmt->fetch()) {
//     echo $rinda["virsraksts"] . "<br>";
// }

// Bīstāga situācija - bezgalīga cilpa (IZVAIRĪTIES!)
// $i = 0;
// while (true) {
//     echo $i++;
//     // Jābūt break nosacījumam, citādi cilpa neapstājas!
//     if ($i > 1000) break;
// }
?>

do-while cilpa

Atšķirībā no while, do-while cilpa tiek izpildīta vismaz vienu reizi, jo nosacījums tiek pārbaudīts pēc izpildes.

Teksts
<?php
$skaits = 1;

do {
    echo "Skaits: $skaits<br>";
    $skaits++;
} while ($skaits <= 5);

// Atšķirība no while:
$i = 10;

// while - netiek izpildīts (10 > 5 ir false?)
while ($i < 5) {
    echo "while: $i<br>"; // Netiek izvadīts
    $i++;
}

// do-while - izpildās VIENU reizi, pat ja nosacījums aplams
do {
    echo "Vismaz vienu reizi!<br>"; // Tiek izvadīts!
    $i++;
} while ($i < 5);

// Praktisks piemērs - lietotāja ievades validācija simulācija
$mēginājumi = 0;
$pareizaAtbilde = 42;
$atbilde = 0;

do {
    $mēginājumi++;
    // Simulējam - reālā lapā šī būtu formas ievade
    $atbilde = ($mēginājumi == 3) ? 42 : rand(1, 100);
    echo "Mēginājums $mēginājumi: $atbilde<br>";
} while ($atbilde !== $pareizaAtbilde && $mēginājumi < 5);

if ($atbilde === $pareizaAtbilde) {
    echo "Pareizi! ($mēginājumi mēginājumi)<br>";
}
?>

foreach cilpa

foreach ir īpaši paredzēts masīvu apstrādei. Tas ir visvieglāk lietojamais cilpu veids PHP.

Teksts
<?php
// Vienkāršs masīvs
$augļi = ["ābols", "bumbieris", "ķirsis", "plūme"];

foreach ($augļi as $auglis) {
    echo "Auglis: $auglis<br>";
}

// Ar indeksu
foreach ($augļi as $index => $auglis) {
    echo "$index: $auglis<br>";
}
// 0: ābols
// 1: bumbieris
// ...

// Asociatīvs masīvs
$persona = [
    "vārds"   => "Marta",
    "uzvārds" => "Bērziņa",
    "vecums"  => 28,
    "pilsēta" => "Rīga"
];

foreach ($persona as $atslēga => $vērtība) {
    echo "$atslēga: $vērtība<br>";
}

// Masīvs ar objektiem / daudzlīmeņu
$studenti = [
    ["vārds" => "Jānis",  "atzīme" => 85],
    ["vārds" => "Marta",  "atzīme" => 92],
    ["vārds" => "Pēteris","atzīme" => 76],
];

foreach ($studenti as $students) {
    echo "{$students["vārds"]}: {$students["atzīme"]} punkti<br>";
}

// Mainoties masīva elementam ar & (atsauce)
$skaitļi = [1, 2, 3, 4, 5];
foreach ($skaitļi as &$sk) {  // & = atsauce uz oriģinālo elementu
    $sk *= 2;
}
unset($sk); // SVARĪGI: dzēst atsauci pēc cikla!
print_r($skaitļi); // [2, 4, 6, 8, 10]
?>

break un continue

🎓 Ko mācīties tālāk?

Nākamajā sadaļā iepazīstieties ar masīviem – vienu no spēcīgākajiem PHP datu tipiem.

Teksts
<?php
// break - pārtrauc cilpu
for ($i = 1; $i <= 10; $i++) {
    if ($i === 5) {
        echo "Apstājos pie 5!<br>";
        break; // Iziet no cikla
    }
    echo "$i ";
}
echo "<br>"; // 1 2 3 4 Apstājos pie 5!

// continue - izlaiž pārējo iterāciju
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 === 0) {
        continue; // Izlaiž pāra skaitļus
    }
    echo "$i "; // 1 3 5 7 9
}
echo "<br>";

// break ar līmeni (izkļūšana no ligzdotām cilpām)
for ($i = 1; $i <= 3; $i++) {
    for ($j = 1; $j <= 3; $j++) {
        if ($j === 2) {
            break 2; // Vai break 1 - pārtrauc arī ārējo cilpu
        }
        echo "($i,$j) "; // Tikai (1,1)
    }
}
echo "<br>";

// Praktisks piemērs - meklēšana masīvā
$vārdi = ["ābols", "bumbieris", "ķirsis", "plūme", "aprikoze"];
$meklētais = "ķirsis";
$atrasts = false;

foreach ($vārdi as $index => $vārds) {
    if ($vārds === $meklētais) {
        echo "Atrasts '$meklētais' pozīcijā: $index<br>";
        $atrasts = true;
        break; // Nav jāturpina meklēšana
    }
}

if (!$atrasts) {
    echo "'$meklētais' nav atrasts<br>";
}
?>