foreach

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

foreach yapısı diziler üzerinde yineleme yapmayı kolaylaştırmaktadır. foreach yalnızca diziler ve nesneler 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:

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

İlk sözdizimi yinelenebilir_ifade ile belirtilen yinelenebilirin etrafında döner. Her yinelemede, sırası gelen elemanın değeri $değer değişkenine atanır.

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

foreach işlevinin, current() ve key() gibi işlevler tarafından kullanılan dahili dizi göstericisini değiştirmediği unutulmamalıdır.

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

$değer değişkeninin önüne & koyarak dizi elemanları üzerinde kolayca değişiklik yapılabilir. Böylece değer gönderimli hale gelir.

<?php
$dizi 
= array(1234);
foreach (
$dizi as &$değer) {
    
$değer $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
?>

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. Yoksa aşağıdaki davranışla karşılaşırsınız:

<?php
$dizi 
= array(1234);
foreach (
$dizi as &$değer) {
    
$değer $değer 2;
}
// $dizi şimdi array(2, 4, 6, 8)

// unset($değer) olmaksızın, $değer hala son öğeye gösterimli olur: $dizi[3]

foreach ($dizi as $key => $değer) {
    
// $dizi[3] artık $dizi içindeki her değerle güncellenecek
    
echo "{$key} => {$değer} ";
    
print_r($dizi);
 }
// ...ikinciden son değere kadar son değere kopyalanacak.

// çıktı:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>

Bir sabit dizinin değerini gönderim olarak yinelemek mümkündür:

<?php
foreach (array(1234) as &$değer) {
    
$değer $değer 2;
}
?>

Bilginize:

foreach @ kullanarak hata iletilerini göstermeme yeteneğini desteklemez.

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: dinamik diziler */

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

İç içe dizilerin list() ile ayrıştırılması

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

Dizi dizileri üzerinde döngü oluşturmak ve list() işlevini değer olarak kullanmak suretiyle içteki diziyi döngü değişkenlerine atayarak onu da açmak artık mümkündür.

Örneğin:

<?php
$dizi 
= [
    [
12],
    [
34],
];

foreach (
$dizi as list($a$b)) {
    
// $a içteki dizinin ilk elemanını,
    // $b ikinci elemanını içerecektir.
    
echo "A: $a; B: $b\n";
}
?>

Yukarıdaki örneğin çıktısı:

A: 1; B: 2
A: 3; B: 4

İçteki dizinin gerekmeyen elemanlarını list() içinde içermeyebilirsiniz:

<?php
$dizi 
= [
    [
12],
    [
34],
];

foreach (
$dizi as list($a)) {
    
// Burada artık $b yok.
    
echo "$a\n";
}
?>

Yukarıdaki örneğin çıktısı:

1
3

list() için yeterli sayıda dizi elemanı yoksa bir uyarı üretilir.:

<?php
$dizi 
= [
    [
12],
    [
34],
];

foreach (
$dizi as list($a$b$c)) {
    echo 
"A: $a; B: $b; C: $c\n";
}
?>

Yukarıdaki örneğin çıktısı:


Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C:

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top