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(1, 2, 3, 4);
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(1, 2, 3, 4);
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(1, 2, 3, 4) 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(1, 2, 3, 17);

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(1, 2, 3, 17);

$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(1, 2, 3, 4, 5) 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
= [
[
1, 2],
[
3, 4],
];

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
= [
[
1, 2],
[
3, 4],
];

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
= [
[
1, 2],
[
3, 4],
];

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 add a note

User Contributed Notes 2 notes

up
24
Okafor Chiagozie
2 years ago
An easier way to unpack nested array elements

$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as [$a, $b]) {
    echo "A: $a; B: $b\n";
}
up
1
Sanusi Hassan
2 years ago
destructure array elements

you can unpac nested array elements using the following

<?php
$array
= [
    [
1, 2],
    [
3, 4],
];

foreach (
$array as $v) {
    [
$a, $b] = $v;
    echo
"A: $a; B: $b\n";
}
?>
To Top