PHP 8.3.4 Released!

for

(PHP 4, PHP 5, PHP 7, PHP 8)

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);
}
?>

add a note

User Contributed Notes 2 notes

up
309
matthiaz
12 years ago
Looping through letters is possible. I'm amazed at how few people know that.

for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}

returns: R S T U V W X Y Z AA AB AC

Take note that you can't use $col < 'AD'. It only works with !=
Very convenient when working with excel columns.
up
70
nzamani at cyberworldz dot de
22 years ago
The point about the speed in loops is, that the middle and the last expression are executed EVERY time it loops.
So you should try to take everything that doesn't change out of the loop.
Often you use a function to check the maximum of times it should loop. Like here:

<?php
for ($i = 0; $i <= somewhat_calcMax(); $i++) {
somewhat_doSomethingWith($i);
}
?>

Faster would be:

<?php
$maxI
= somewhat_calcMax();
for (
$i = 0; $i <= $maxI; $i++) {
somewhat_doSomethingWith($i);
}
?>

And here a little trick:

<?php
$maxI
= somewhat_calcMax();
for (
$i = 0; $i <= $maxI; somewhat_doSomethingWith($i++)) ;
?>

The $i gets changed after the copy for the function (post-increment).
To Top