Denetim Yapıları
PHP Manual

foreach

PHP 4 ile birlikte Perl ve bazı diğer dillerde mevcut olan foreach yapısı da kullanıma sunulmuştur. Bu deyim diziler üzerinde yineleme yapmayı kolaylaştırmaktadır. foreach yalnızca diziler için kullanılabilir; farklı veri türünde veya ilklendirilmemiş bir değişken ile kullanmak istediğinizde hata verir. İki sözdizimi mevcuttur; ikincisi birinciden biraz daha kullanışlıdır:

foreach (dizi_ifadesi as $değer)
    deyim
foreach (dizi_ifadesi as $isim => $değer)
    deyim

İlk sözdizimi dizi_ifadesi ile belirtilen dizinin üzerinde döngü oluşturur. Her yinelemede, sırası gelen elemanın değeri $değer değişkenine atanır ve dizi göstericisi bir arttırılır (böylece bir sonraki yinelemede dizinin bir sonraki elemanına bakılması sağlanmış olur).

İkinci yöntem de aynı şeyi yapar, ek olarak her yinelemede sırası gelen elemanın anahtarı $isim değişkenine atanır.

PHP 5'den itibaren, nesneleri yinelemek mümkün olmuştur.

Bilginize:

foreach ilk çalışmaya başladığında, dizi göstericisi özdevinimli olarak ilk elemanı gösterecek biçimde sıfırlanır. Bu sebeple, foreach deyiminden önce reset() işlevini çalıştırmanıza gerek yoktur.

Bilginize:

Dizi gönderimli olmadıkça, foreach dizinin kendisi üzerinde değil, bir kopyası üzerinde çalışır. Bundan dolayı özgün dizi göstericisi değiştirilmez ve döndürülen dizi elemanı üzerinde yapılan değişiklikler özgün diziye yansıtılmaz.

PHP 5'den itibaren, $değer değişkeninin önüne & koyarak dizi elemanları üzerinde kolayca değişiklik yapılabilmektedir. Bu kullanımla değeri kopyalamak yerine kendisine bir gönderim yapılması sağlanır.

<?php
$dizi 
= array(1234);
foreach (
$dizi as &$değer) {
    
$value $değer 2;
}
// $dizi artık array(2, 4, 6, 8) olmuştur
unset($değer); // son eleman da işlendiğine göre gönderimi kaldıralım
?>
Bu durum yalnızca yinelenen diziye gönderim yapılabiliyorsa mümkündür (örneğin, bir değişkense), yani aşağıdaki kod çalışmaz:
<?php
foreach (array(1234) as &$value) {
    
$value $value 2;
}

?>

Uyarı

$değer gönderim için kullanıldığından foreach döngüsünün sonunda son dizi elemanına gönderimli olarak kalır, bu bakımdan döngünün sonunda bu gönderimin unset() işlevi kullanılarak kaldırılması önerilir.

Bilginize:

foreach, hata iletilerinin '@' kullanılarak gözardı edilmesi özelliğini desteklemez.

Aşağıdaki iki döngünün aynı işi yaptığını farkedeceksiniz:

<?php
$dizi 
= array("bir""iki""üç");
reset($dizi);
while (list(, 
$değer) = each($dizi)) {
    echo 
"Değer: $değer<br />\n";
}

foreach (
$dizi as $değer) {
    echo 
"Değer: $değer<br />\n";
}
?>
Aşağıdakiler de işlevsel olarak aynıdır:
<?php
$dizi 
= array("bir""iki""üç");
reset($dizi);
while (list(
$isim$değer) = each($dizi)) {
    echo 
"Anahtar: $isim; Değer: $değer<br />\n";
}

foreach (
$dizi as $isim => $değer) {
    echo 
"Anahtar: $isim; Değer: $değer<br />\n";
}
?>

Değişik kullanımlara örnekler:

<?php
/* foreach örneği 1: yalnızca değer */

$a = array(12317);

foreach (
$a as $v) {
   echo 
"\$a değişkeninin şu anki değeri: $v.\n";
}

/* foreach örneği 2: değer (örnek olması için anahtar
 *  ile birlikte yazdırılmıştır) */

$a = array(12317);

$i 0/* yalnızca örnekleme için */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* foreach örneği 3: anahtar ve değer */

$a = array(
    
"bir" => 1,
    
"iki" => 2,
    
"üç"  => 3,
    
"on yedi" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* foreach örneği 4: çok boyutlu diziler */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* foreach örneği 5: devingen diziler */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>


Denetim Yapıları
PHP Manual