An easier way to unpack nested array elements
$array = [
[1, 2],
[3, 4],
];
foreach ($array as [$a, $b]) {
echo "A: $a; B: $b\n";
}
(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
?>
$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";
}
?>
(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:
An easier way to unpack nested array elements
$array = [
[1, 2],
[3, 4],
];
foreach ($array as [$a, $b]) {
echo "A: $a; B: $b\n";
}