(PHP 4, PHP 5, PHP 7)
for döngüsü, PHP'deki en karmaşık döngü yapısıdır. C'deki karşılığıyla aynı biçimde çalışır. for döngüsünün sözdimi:
for (ifade1; ifade2; ifade3) deyim
İlk ifade (ifade1) döngünün en başında bir kereliğine koşulsuz olarak çalıştırılır.
Her yinelemenin başında ifade2 yeniden
değerlendirilir. Bu ifadeden TRUE
sonucu elde edilirse, döngüye devam
edilir ve döngünün etki alanındaki deyimler çalıştırılır. Bu ifadeden
FALSE
sonucu elde edildiğinde etki alanındaki deyimler
çalıştırılmaksızın döngü sonlandırılır.
ifade3 ise her yinelemenin sonunda çalıştırılır.
Bu ifadelerin herbirini boş bırakmak da mümkündür.
ifade2nin boş olması, döngünün sonsuza kadar
çalıştırılacağı anlamına gelir (PHP, C'deki gibi bu durumu TRUE
olarak
değerlendirir). Döngülerden genellikle bir şarta bağlı olarak break
deyimi ile çıkmak isteyeceğiniz düşünüldüğünde, bu durum düşündüğünüz
kadar kullanışsız değildir.
Aşağıdaki örnekleri ele alalım. Hepsi de 1'den 10'a kadar sayıları görüntülemektedir:
<?php
/* örnek 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* örnek 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* örnek 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* örnek 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Elbette, kullandığımız ilk örnek en güzel örnek olarak gözükmektedir (ya da belki dördüncü örnek), ancak birçok durumda for döngüsü içerisinde boş ifadeler kullanmayı oldukça kullanışlı bulabilirsiniz.
PHP, iki noktalı sözdizimini for döngüleri için de desteklemektedir.
for (ifade1; ifade2; ifade3): deyimler ... endfor;
Çoğu kullanıcının yaptığı gibi diziler üzerindeki yinelemeleri şöyle yapabilirsiniz:
<?php
/*
* Diziye baştan bir kaç veri atıp daha sonra
* döngü içinde verilerde değişiklik yapacağız.
*/
$bizimkiler = Array(
Array('isim' => 'Ali', 'tuz' => 856412),
Array('isim' => 'Veli', 'tuz' => 215863)
);
for($i = 0; $i < count($bizimkiler); ++$i)
{
$bizimkiler[$i]['tuz'] = mt_rand(000000, 999999);
}
?>
Her yinelemede dizinin boyutları yeniden hesaplandığından kod yavaş çalışabilir. Örnekte boyut değişmediğinden count() işlevini defalarca çağırmak yerine dizi boyutunu bir değişkene atıp ifadede bu değişken kullanılarak kod en iyilenebilir:
<?php
$bizimkiler = Array(
Array('isim' => 'Ali', 'tuz' => 856412),
Array('isim' => 'Veli', 'tuz' => 215863)
);
for($i = 0, $size = count($bizimkiler); $i < $size; ++$i)
{
$bizimkiler[$i]['salt'] = mt_rand(000000, 999999);
}
?>