Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

PHP foreach nedir?​


PHP foreach, bir dizideki veya nesnedeki elemanları sırayla dolaşmak için kullanılan döngüdür. Her elemanda ilgili değeri geçici bir değişkene aktarır; böylece sayaç tanımlamadan liste üzerinde işlem yapabilirsiniz. Elemanları yalnızca değerleriyle veya anahtarlarıyla birlikte dolaşabilirsiniz.

Temel kullanım​


En kısa biçim şöyledir:

Kod:
$meyveler = ['Elma', 'Armut', 'Muz'];

foreach ($meyveler as $meyve) {
    echo $meyve . PHP_EOL;
}

Döngü her çalıştığında $meyve değişkenine sıradaki eleman atanır. Bu örneğin çıktısı sırasıyla Elma, Armut ve Muz olur. Dizi boşsa döngünün gövdesi hiç çalışmaz.

Anahtarları da almak için anahtar => değer biçimini kullanın:

Kod:
$kullanicilar = [
    'admin' => 'Ayşe',
    'editor' => 'Mehmet'
];

foreach ($kullanicilar as $rol => $ad) {
    echo $rol . ': ' . $ad . PHP_EOL;
}

Burada $rol anahtarı, $ad ise o anahtarın değeridir. Anahtarların sıfırdan başlayan sayılar olması gerekmez; metin anahtarlar da kullanılabilir.

Değerleri değiştirme​


Aşağıdaki tamsayı dizisinde normal foreach değişkenine yeni değer atamak özgün dizi elemanını değiştirmez. Bu ayrım, bir elemanın nesne olması durumunda o nesnenin özelliklerinin de kopyalandığı anlamına gelmez:

Kod:
$sayilar = [1, 2, 3];

foreach ($sayilar as $sayi) {
    $sayi *= 2;
}

print_r($sayilar);

Sonuç yine [1, 2, 3] olur. Özgün diziyi değiştirmek gerekiyorsa referans kullanabilirsiniz:

Kod:
foreach ($sayilar as &$sayi) {
    $sayi *= 2;
}
unset($sayi);

print_r($sayilar);

Bu kez dizi [2, 4, 6] olur. Referans döngüsünden sonra unset($sayi) çağrısı önemlidir; aksi hâlde değişken son elemana bağlı kalabilir ve sonraki işlemlerde beklenmedik değişikliklere yol açabilir. Sadece hesaplama veya çıktı gerekiyorsa referans kullanmayın.

Hangi biçimi seçmelisiniz?​


İhtiyaca göre karar vermek için şu ayrımı kullanın:

İhtiyaçKullanımNot
Yalnız değerleri okumakforeach ($liste as $deger)En sade ve güvenli biçim
Anahtar ve değeri birlikte kullanmakforeach ($liste as $anahtar => $deger)İlişkili diziler için uygundur
Özgün dizideki değerleri değiştirmekforeach ($liste as &$deger)Sonrasında unset($deger) kullanın
Belirli elemanlarda döngüyü kesmekbreak veya continueAkışı açıkça sınırlar

Uygulanabilir örnek: koşula göre işlem yapmak​


Bir listedeki yalnızca etkin kullanıcıları işlemek için döngüyü koşulla birlikte kullanabilirsiniz:

Kod:
$kullanicilar = [
    ['ad' => 'Ayşe', 'aktif' => true],
    ['ad' => 'Mehmet', 'aktif' => false],
    ['ad' => 'Zeynep', 'aktif' => true]
];

foreach ($kullanicilar as $kullanici) {
    if (!$kullanici['aktif']) {
        continue;
    }

    echo $kullanici['ad'] . PHP_EOL;
}

continue mevcut elemanı atlayıp sonraki elemana geçer. Belirli bir kayıt bulunduğunda tüm döngüyü bitirmek için break kullanılır. Döngüden sonra elde edilen sonucu doğrulamak istiyorsanız bir sayaç veya sonuç dizisi oluşturup yalnızca gerçekten gereken bilgileri biriktirin.

Sık yapılan hatalar​


  • Dizi yerine null veya beklenmeyen bir tür üzerinde döngü kurmak: Döngüden önce verinin gerçekten dizi ya da dolaşılabilir bir nesne olduğunu kontrol edin.
  • Anahtarları değer sanmak: as $deger yalnızca değeri verir; anahtar gerekiyorsa as $anahtar => $deger yazılmalıdır.
  • Döngü değişkenini referansla bırakmak: Referans kullanımından sonra unset çağırmamak, sonraki atamalarda özgün dizinin son elemanını etkileyebilir.
  • Dizi üzerinde dönerken yapıyı değiştirmek: Eleman ekleme, silme veya anahtarları değiştirme işlemleri dolaşmanın sonucunu karmaşıklaştırabilir. Değişiklik gerekiyorsa önce yeni bir sonuç dizisi oluşturmak genellikle daha anlaşılırdır.
  • Sadece sayaç gerektiğinde gereksiz karmaşık döngü kurmak: Listedeki elemanları dolaşmak için foreach, belirli sayıda tekrar için ise çoğu zaman for daha uygundur.

Sık sorulan sorular​


Döngü bitince değer değişkeni kendiliğinden silinir mi?​


Hayır. Döngü ayrı bir değişken kapsamı oluşturmaz; en az bir tur çalıştıysa son atanan değer sonraki kodda kalabilir. Boş dizide ise yeni bir atama yapılmaz. Bu yüzden döngü sonrasında değerin oluştuğunu varsaymayın veya değişkeni başka bir amaç için örtük biçimde kullanmayın.

foreach nesneler üzerinde kullanılabilir mi?​


Evet. Normal bir nesnede çağrılan kapsamdan görülebilen özellikler dolaşılır. Iterator veya IteratorAggregate gibi mekanizmalarla özel dolaşım davranışı sunan nesnelerde anahtar ve değerleri o uygulama belirler.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.