SIKLLAR. PHP dasturlash tilida shartga bog’liq ravishda qaytariladigan amallardan iborat bir nechta konstruktsiyalar mavjud. Bu while, do..while, foreach hamda for tsikllardir. Ularni batafsil ko’rib chiqamiz.
while
Strukturasi:
while (ifoda) { bajariladigan_blok }
yoki
while (ifoda): bajariladigan_blok endwhile;
while – bu oddiy tsikl. U ifoda qiymati True (bu erda xuddi if operatori kabi ifoda mantiqiy tipga o’zlashtiriladi) bo’lgunicha bajariladigan_blokdagi buyruqlarni bajarishga buyuradi. Ifoda qiymati har tsikl boshlanganda tekshirib boriladi, agarda uning qiymati bajariladigan_blok bajarilish jarayonida o’zgargan taqdirda ham iteratsiya tugamaguncha (ya’ni bajariladigan_blokdagi barcha buyruqlar bajarilmaguncha) tsikl to’tatilmaydi.
//Bu dastur barcha juft sonlarni ekranga chiqaradi.
$i = 1;
while ($i < 10) {
if ($i % 2 == 0) print $i;
// agar u juft bo’lsa ekranga chiqaradi.
$i++;
// $i o’zgaruvchi bittaga oshiriladi
}
?>
misol. while operatori. do... while
do..while tsikli while tsiklga o’xshaydi, ammo farqli tomoni shundaki, ifodaning rostligiga tsikl boshida emas, balki oxirida tekshiriladi. Qulay tomoni shundaki, bajariladigan_blok do..while tsikli ichida hech bo’lmaganda bir marta bajariladi.
Strukturasi:
do { do..while tsikli } while (ifoda);
// bu dastur shart bajarilmasa ham
// 12 raqamini ekranga chiqaradi.
$i = 12;
do{
if ($i % 2 == 0) print $i;
// agar son juft bo’lsa uni ekranga chiqaramiz
$i++;
// sonni bittaga oshiramiz
}while ($i<10)
?>
misol. do..while operatori. for
Bu PHP dasturlash tilidagi eng murakkab tsikldir. Ular S dasturlash tilidagi tsikllarni eslatadi.
Strukturasi:
for (ifoda1; ifoda2; ifoda3) { bajariladigan_blok }
yoki
for (ifoda1; ifoda2; ifoda3): bajariladigan_blok endfor;
Bu erda ko’rinib turibdiki shar uchta ifodadan tashkil topadi. Birinchi ifoda1 ifoda tsikl boshida shartsiz bajariladi. Har bir iteratsiyaning boshlanishida ifoda2 bajariladi. Agar u True qiymatni qabul qilsa, u holda tsikl o’z ishini davom ettiradi va bajariladigan_blokdagi barcha buyruqlarni bajaradi. Agar ifoda2 False qiymatni qabul qilsa, u holda tsikl to’xtatiladi. Har bir iteratsiya (ya’ni bajariladigan_blokdagi barcha buyruqlarni bajarilishidan keyin) oxirida ifoda3 bajariladi.
Har bir 1-,2- va 3-ifodalar bo’sh bo’lishi mumkin. Agar ifoda2 bo’sh bo’lsa, bu tsiklni cheksiz (bu holda PHP dasturlash tili bu ifodani har doim rost deb hisoblaydi) bajarilishini bildiradi. Bu unchalik befoyda emas, chunki tsiklni break operatori yordamida to’xtatsa bo’ladi.
Masalan, barcha juft sonlarni for tsikli yordamida quyidagicha ekranga chiqarish mumkin:
for ($i=0; $i<10; $i++){
if ($i % 2 == 0) print $i;
// juft sonlarni ekranga chiqaramiz
}
?>
Agarda ikkinchi ifodani ($i<10 shartni) tashlab ketsak, bu masaladagi tsiklni ham break operatori yordamida to’xtatsa bo’ladi.
for ($i=0; ; $i++){
if ($i>=10) break;
// agar $i katta yoki teng 10 bo’lsa,
// u holda tsikl ishini to’xtatamiz.
if ($i % 2 == 0) print $i;
// agar son juft bo’lsa,
// uni ekranga chiqaramiz.
}
?>
Barcha uchala ifodani ham tushirib qoldirish mumkin. Bu holda schyotchik $i o’zgaruvchini boshlang’ich qiymati berilmaydi va har bir tsikl oxirida u o’zgarmaydi. Bu barcha buyruqlarni alohida buyruqlar ko’rinishida yoki tsikldan avval bajariladigan_blok ichida yozsa ham bo’ladi:
$i=0; // schyotchikni boshlang’ich qiymatini beramiz
for ( ; ; ){
if ($i>=10) break;
// agar $i katta yoki teng 10 bo’lsa,
// u holda tsikl ishini to’xtatamiz.
if ($i % 2 == 0) print $i;
// agar son juft bo’lsa,
// uni ekranga chiqaramiz.
$i++; // schyotchik qiymatini bittaga oshiramiz.
}
?>
for tsikli konstruktsiyasidagi uchinchi ifodada verguldan keyin yana bir nechta oddiy buyruqlarni ham yozsa bo’ladi. Masalan, agar biz oddiygina barcha sonlarni ekranga chiqarmoqchi bo’lsak, dasturni quyidagicha yozsa bo’ladi:
for ($i=0; $i<10; print $i, $i++)
/* Agarda bajariladigan_blok buyruqlardan tashkil topmagan
yoki bitta buyruqdan tashkil topgan bo’lsa,
figurali qavsga olingan qismni
tashlab ketsa bo’ladi.*/
?>
foreach
Yana bitta foydali konstruktsiya. U faqat PHP4 dasturlash tilida uchraydi va massivlar bilan ishlashga mo’ljallangan.
Sintaksisi quyidagicha:
foreach ($array as $value) { bajariladigan_blok }
yoki
foreach ($array as $key => $value)
{ bajariladigan_blok }
Birinchi holda berilgan $array o’zgaruvchi massivning elementlari formallashtiriladi. Har bir tsikl qadamida massivning joriy elementi qiymati $value o’zgaruvchiga o’zlashtiriladi va massivning ichki hisoblagichi bittaga ortadi (chunki keyingi qadamda massivning keyingi elementi kerak bo’ladi). bajariladigan_blok ichidagi massivning joriy elementi qiymati $value o’zgaruvchi yordamida qiymatga ega bo’ladi. bajariladigan_blok $array massivning elementlari nechta bo’lsa shuncha marta bajariladi.
Yuqorida keltirilgan ikkinchi to’ldirilgan shaklda har bir tsikl qadamida massivning joriy elementi kaliti bajariladigan_blokda qo’llansa ham bo’ladigan $key o’zgaruvchiga yozib boriladi.
foreach tsikli ishini boshlaganda massivning ichki ko’rsatgichi avtomatik ravishda birinchi elementni ko’rsatadi.
$names = array("Karim","Salim","Sodiq");
foreach ($names as $val) {
echo "Salom, $val
";
// barcha salomlashishlarni ekranga chiqaramiz
}
foreach ($names as $k => $val) {
// salomlashishdan tashqari
// ro’yxatdagi raqamini, ya’ni kalitini ekranga chiqaramiz
echo "Salom, $val !
Sen ro’yxatda $k – raqamdasan.
";
}
?>
10>