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

User Contributed Notes 3 notes

up
2
Okafor Chiagozie
4 months 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
0
Sanusi Hassan
4 months 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";
}
?>
up
-26
jon at pearkins dot com
3 months ago
For an array, foreach presents the elements of the array in the order that they were added to the array. For example, if you need to have the elements presented in ascending order by key, use the ksort function to rearrange the elements of the array in key sequence.

This behavior is a result of the way that PHP arrays are stored. foreach merely presents the elements of an array in the order that they are stored within the array.
To Top