Цикълът е конструкция, която ви позволява да повтаряте отново и отново даден набор от инструкции дотогава, докато зададеното в цикъла условие връща резултат „истина“. Вие може да определите точно числото на повторенията или броя повторения може да зависи от определени едно или повече условия.
1. Конструкция while
Конструкцията с ключова дума while има следния синтаксис:
while (израз за проверка) {прави това}
С тази конструкция казваме: „Докато е вярно това, трябва да правиш ето това“. Цикълът while борави с булеви резултати (истина и неистина). Докато изразът в кръглите скоби, чиято истинност се проверява, връща резултат true (истина), дотогава ще бъде изпълняван кодът, указан в големите скоби. В момента, в който резултатът от условието за проверка стане false (неистина), изпълнението на цикъла се прекъсва.
Да разгледаме следния пример:
<?php
$prom1 = 100;
$prom2 = 50;
while ($prom2 < $prom1)
{
$prom2++;
echo "$prom2<br />";
}
?>
В горния код е дадено за изпълнение следното:
- Присвоени са стойностите 100 и 50 съответно на променливите $prom1 и $prom2.
- Зададено е условието – докато стойността на $prom2 е по-малка от стойността на $prom1, прибавяй по една единица към стойността на $prom2.
- Резултатът от промяната на променливата $prom2 е изведен на екран.
Визуалният резултат, генериран от горния код, ще бъде поредицата числа от 51 до 100, като за по-голяма прегледност чрез <br /> е зададено всяко отделно число да е на отделен ред. T.e. при всяко изпълнение на цикъла към стойността на променливата $prom2 е прибавяна по единица, докато стойностите на двете променливи не се изравнят.
2. Конструкция do-while
Синтаксисът на конструкцията while е такъв, че ако зададеното в кръглите скоби условие върне резултат „неистина“ още при първата проверка за истинност, тогава кодът в големите скоби изобщо няма да се изпълни. Понякога обаче е необходимо поне едно изпълнение на цикъла. В такъв случай се ползва конструкцията do-while. Тя има следния синтаксис:
do {прави това} while (израз за проверка на истинност)
Дори още първата проверка на условието да върне резултат „неистина“, все пак ще получим еднократно изпълнение на цикъла, тъй като изразът за проверка истинността на условието е след нареждането за първоначално изпълнение.
Пример:
<?php
$prom1 = 100;
$prom2 = 50;
do
{
echo "Това съобщение ще се покаже поне веднъж.<br />";
}
while(++$prom1 < $prom2)
?>
В горния код стойността на $prom1 (100) е по-голяма от стойността на $prom2 (50), а зададеното условие е да се показва изречението „Това съобщение ще се покаже поне веднъж“ докато $prom1 е по-малко от $prom2, т.е. докато 100 е по-малко от 50. Този цикъл ще върне „невярно“ още при първото си изпълнение, понеже 100 не е по-малко от 50, но все пак ще имаме едно изпълнение на цикъла, т.е. едно показване на екран на текста „Това съобщение ще се покаже поне веднъж„. Ако разменим стойностите на двете променливи в същия код, тогава изречението ще бъде изведено на екрана 50 пъти.
3. Конструкция for
Често използвана е също конструкцията for. С нейна помощ се постига повече контрол над изпълнявания цикъл. Синтаксисът на for е следният:
for (променлива-брояч с начална стойност; условие; нова стойност на променливата-брояч) {направи това}
В кръглите скоби след ключовата дума for има 3 елемента:
- Задава се някаква начална стойност на променлива, от която да започва изпълнението на цикъла. Тази променлива се явява брояч на това колко пъти ще се изпълни цикъла. Често в скриптовете тази променлива носи названието $i (от „инициализираща“. т.е. начална стойност).
- Поставя се условието, като цикълът се изпълнява докато поставеното условие връща резултат „истина“.
- Задава се увеличение на началната стойност на променливата.
Трите елемента се отделят един от друг чрез точка и запетая.
Преди всяко изпълнение на цикъла условието се проверява за истинност и ако резултатът е true цикълът се изпълнява отново, като при това се увеличава стойността на променливата-брояч. Цялата конструкция дава възможност да се настрои точно определен брой пъти на изпълнението на цикъла.
Един най-прост пример с цикъла for е следния код:
<?php
for ($i = 1; $i <= 5; $i++)
{
echo $i;
}
?>
Горният код ще ни даде като резултат поредицата цифри от 1 до 5, тъй като е зададено началната стойност при изпълнение на цикъла да бъде 1 ($i = 1), при всяко следващо повторение на цикъла стойността на $i да се увеличава с единица ($i++), а в условието е зададено цикълът да продължи да се изпълнява докато стойността на променливата $i е по-малка или равна на 5 ($i <= 5). Следователно цикълът ще се изпълнява докато началната стойност 1 не нарасне до 5, т.е. ще имаме 5 повторения на цикъла.
Можем да усложним малко този пример:
<?php
for ($broi = 5; $broi < 20; $broi++)
{
$rezultat = $broi + 100;
echo "$broi + 100 = $rezultat<br />";
}
?>
Горният код извършва следното:
- на променливата-брояч $broi е зададена начална стойност 5 ($broi = 5;),
- поставеното условие е: скриптът се изпълнява докато стойността на брояча е по-малка от 20 ($broi < 20;),
- зададено е началната стойност на променливата-брояч да се инкрементира при всяко изпълнение на цикъла ($broi++), т.е. да се увеличава с единица при всяко следващо изпълнение на цикъла.
След това започва изпълнението на зададеното в конструкцията {$rezultat = $broi + 100;}. При първото изпълнение началната стойност на променливата-брояч е събрана със сто. Понеже началната стойност е 5, операцията е сбор на 5 със 100, което е 105. Резултатът се присвоява на променливата $rezultat, показва се на екрана чрез echo и цикълът започва следващото си изпълнение. Тъй като е зададено променливата-брояч да се инкрементира, т.е. да увеличава стойността си с единица при всяко следващо изпълнение на цикъла, то при следващото изпълнение на цикъла нейната стойност ще бъде 6, съответно сборът вече ще бъде 6 + 100 и резултатът ще е 106. При третото изпълнение на цикъла резултатът ще е 107 и т.н.
По този начин цикълът ще се изпълнява докато изразът за проверка не върне резултат „неистина“. Според зададеното условие цикълът ще се изпълнява докато началната стойност 5 е по-малка от 20. Тъй като на всяко изпълнение началната стойност се увеличава с единици, то цикълът ще се изпълни 15 пъти (докато стойността на променливата не нарасне от 5 до 19).