PHP / Давталтууд (for, while, foreach)

Давталтууд (for, while, foreach)

Давталт (loop) нь нэг кодыг олон удаа гүйцэтгэх хэрэгслүүд юм. Жагсаалт харуулах, 100 бичлэг боловсруулах, тоо нэмэх зэрэг давтагдах ажлуудад давталт хэрэглэдэг. PHP-д for, while, do-while, foreach гэсэн дөрвөн үндсэн давталт байдаг.

for давталт

Хэдэн удаа давтахаа урьдчилан мэдэх үед for тохиромжтой:

php
<?php
// for (эхлэл; нөхцөл; алхам)
for ($i = 1; $i <= 5; $i++) {
    echo "$i ";
}
// 1 2 3 4 5

// Буцаагаар тоолох
for ($i = 10; $i >= 1; $i--) {
    echo "$i ";
}
// 10 9 8 7 6 5 4 3 2 1

// Хүснэгт үүсгэх жишээ
echo "<table>";
for ($мөр = 1; $мөр <= 3; $мөр++) {
    echo "<tr>";
    for ($багана = 1; $багана <= 3; $багана++) {
        echo "<td>" . ($мөр * $багана) . "</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>

for давталтын гурван хэсэг:

  • Эхлэл — давталт эхлэхдээ нэг л удаа гүйцэтгэгдэнэ
  • Нөхцөлfalse болтол давталт үргэлжилнэ
  • Алхам — нэг давталт бүрийн эцэст гүйцэтгэгдэнэ

while давталт

Нөхцөл үнэн байгаа цагт давтана — хэдэн удаа давтахыг урьдчилан мэдэхгүй үед тохиромжтой:

php
<?php
// Энгийн while
$тоо = 1;
while ($тоо <= 5) {
    echo $тоо . " ";
    $тоо++;
}
// 1 2 3 4 5

// do-while — нөхцлийг ДАРАА шалгадаг (хамгийн багадаа 1 удаа гүйцэтгэгдэнэ)
$оролдлого = 0;
do {
    echo "Оролдлого: $оролдлого\n";
    $оролдлого++;
} while ($оролдлого < 3);
// Оролдлого: 0
// Оролдлого: 1
// Оролдлого: 2

// Бодит жишээ: хуудасчлал (pagination)
$нийт_бичлэг = 47;
$хуудасны_хэмжээ = 10;
$хуудас = 1;

while (($хуудас - 1) * $хуудасны_хэмжээ < $нийт_бичлэг) {
    $эхлэл = ($хуудас - 1) * $хуудасны_хэмжээ + 1;
    $төгсгөл = min($хуудас * $хуудасны_хэмжээ, $нийт_бичлэг);
    echo "Хуудас $хуудас: бичлэг $эхлэл–$төгсгөл\n";
    $хуудас++;
}
?>

foreach давталт

Массивын элемент бүрийг дамжин өнгөрөхөд foreach хамгийн тохиромжтой:

php
<?php
// Индекстэй массив
$өнгөнүүд = ["улаан", "ногоон", "цэнхэр", "шар"];

foreach ($өнгөнүүд as $өнгө) {
    echo "- $өнгө\n";
}
// - улаан
// - ногоон
// - цэнхэр
// - шар

// Индекс болон утгыг хоёуланг нь авах
foreach ($өнгөнүүд as $индекс => $өнгө) {
    echo "$индекс: $өнгө\n";
}
// 0: улаан  1: ногоон  2: цэнхэр  3: шар

// Холбоот массив (associative array)
$хүн = [
    "нэр"     => "Батбаяр",
    "нас"     => 28,
    "хот"     => "Улаанбаатар",
    "мэргэжил" => "Хөгжүүлэгч",
];

foreach ($хүн as $талбар => $утга) {
    echo "$талбар: $утга\n";
}
// нэр: Батбаяр  нас: 28  хот: Улаанбаатар ...
?>

break ба continue

Давталтын явцыг удирдах хоёр чухал тушаал:

php
<?php
// break — давталтыг бүрмөсөн зогсооно
for ($i = 1; $i <= 10; $i++) {
    if ($i === 5) {
        break;   // 5-д хүрэхэд зогсоно
    }
    echo "$i ";
}
// 1 2 3 4

echo "\n";

// continue — одоогийн давталтыг алгасаж дараагийнх руу үсэрнэ
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 === 0) {
        continue;   // Тэгш тоог алгасна
    }
    echo "$i ";
}
// 1 3 5 7 9

// Давхар давталт дотор break 2 (гадна давталтыг зогсооно)
for ($x = 1; $x <= 3; $x++) {
    for ($y = 1; $y <= 3; $y++) {
        if ($x === 2 && $y === 2) {
            break 2;   // Хоёр давталтыг хоёуланг нь зогсооно
        }
        echo "($x,$y) ";
    }
}
// (1,1) (1,2) (1,3) (2,1)
?>

Давталт сонгох удирдамж

php
<?php
$жагсаалт = ["PHP", "JavaScript", "Python", "Go"];

// foreach — массив, объект дамжихад
foreach ($жагсаалт as $хэл) {
    echo "- $хэл\n";
}

// for — тоон хязгаартай, индекс хэрэгтэй үед
$нийт = count($жагсаалт);
for ($i = 0; $i < $нийт; $i++) {
    echo "$i. {$жагсаалт[$i]}\n";
}

// while — нөхцлийн тоог урьдчилан мэдэхгүй үед
$хайж_байна = "Python";
$и = 0;
while ($и < count($жагсаалт) && $жагсаалт[$и] !== $хайж_байна) {
    $и++;
}

if ($и < count($жагсаалт)) {
    echo "$хайж_байна {$и}-р байрлалд байна.";
} else {
    echo "Олдсонгүй.";
}
// Python 2-р байрлалд байна.
?>

Дараагийн хичээлд:

PHP функцийн үндсүүдийг судална — функц зарлах, параметр дамжуулах, утга буцаах, анхдагч утга (default parameter), мөн функцыг яагаад ашиглах нь кодоо цэвэр байлгадгийг ойлгоно.