Web geliştirme serüvenimizde bir önceki yazımızda PHP’deki “Karar Yapıları”nı (If-Else, Switch-Case) öğrenmiş ve programlarımıza kendi başlarına kararlar alabilme yeteneği kazandırmıştık. Ancak programlama dünyasında sıkça karşılaştığımız bir diğer senaryo da aynı işlemin defalarca tekrar edilmesidir.
Örneğin, ekrana 1’den 100’e kadar olan sayıları yazdırmak istediğinizi düşünün. Yüz defa alt alta echo komutu yazmak hem yorucu hem de programlama mantığına aykırıdır. İşte tam bu noktada, belirli bir koşul sağlandığı sürece kod bloklarını otomatik olarak tekrar tekrar çalıştıran yapı taşı devreye girer: Döngüler (Loops).
Bu rehberde, PHP’de bulunan temel döngü çeşitlerini, aralarındaki farkları ve bu döngüleri kontrol etmenizi sağlayan komutları günlük hayattan basit örneklerle ve SEO uyumlu, akıcı bir dille öğreneceğiz.
Neden Döngülere İhtiyacımız Var?
Döngüler, kodumuzda tekrar eden görevleri otomatikleştirmek, uzun veri listelerini işlemek veya veritabanından alınan kayıtları ekrana sıralamak için hayati bir öneme sahiptir. PHP, geliştiricilere farklı ihtiyaçlara yönelik dört temel döngü yapısı sunar: while, do-while, for ve foreach. Şimdi bunları sırasıyla inceleyelim.
1. while Döngüsü: Koşul Doğru Oldukça Çalış
while döngüsü, PHP’deki en temel döngü yapısıdır. Mantığı son derece basittir: Parantez içine yazılan koşul doğru (TRUE) olduğu sürece süslü parantezler { } içindeki kod bloğunu sürekli olarak tekrar eder. Koşul yanlış (FALSE) olduğunda ise döngü durur ve program normal akışına devam eder.
Günlük Hayat Örneği: Bunu bir fındık yeme oyununa benzetebiliriz. Elinizde 5 tane fındık var ve “Enerjin bitene kadar fındık yemeye devam et” kuralıyla hareket ediyorsunuz. Her fındık yediğinizde “Ben fındığı çok seviyorum” diyor ve bir fındığı eksiltiyorsunuz. Tüm fındıklar bitene kadar bu eylem tekrarlanır.
<?php
$findik_sayisi = 1;
// Fındık sayısı 5 veya daha küçük olduğu sürece döngü çalışır
while ($findik_sayisi <= 5) {
echo "Ben fındığı çok seviyorum <br>";
$findik_sayisi++; // Her adımda fındık sayısını 1 artırırız
}
?>
Yukarıdaki kod çalıştığında, döngü her seferinde $findik_sayisi değişkenini kontrol eder. Değişken 5’i geçene kadar mesajı ekrana yazar ve döngü sayacını ($findik_sayisi++) artırır.
2. do-while Döngüsü: Önce Yap, Sonra Kontrol Et
while döngüsünde koşul en başta test edilir; yani koşul daha en başından yanlışsa döngü hiçbir zaman çalışmaz. Ancak bazı durumlarda, koşul ne olursa olsun kodun en az bir kere mutlaka çalışmasını isteyebilirsiniz. Bu durumda do-while döngüsü kullanılır.
Günlük Hayat Örneği: Bu durumu “Ödevini yap, sonra oyun oyna” kuralına benzetebiliriz. Önce ödevinizi bir kere yaparsınız (işlemi gerçekleştirirsiniz), daha sonra “Acaba başka ödevim var mı?” diye kontrol edersiniz. Varsa tekrar yaparsınız, yoksa bitirirsiniz.
<?php
$i = 1;
do {
echo 'Ödevini yap! <br>';
$i++;
} while ($i <= 0);
?>
Dikkat ederseniz $i değişkeni zaten 1’dir ve while ($i <= 0) koşulu daha baştan yanlıştır. Ancak do-while yapısı gereği, koşul döngünün sonunda kontrol edildiği için ekrana bir kez “Ödevini yap!” yazdırılacaktır.
3. for Döngüsü: Tekrar Sayısı Belli Olan İşlemler
Eğer bir kod bloğunun tam olarak kaç defa tekrar edeceğini biliyorsanız (örneğin 1’den 10’a kadar saymak), en uygun ve düzenli yapı for döngüsüdür.
Bir for döngüsü, aralarına noktalı virgül (;) konulan üç ana ifadeden oluşur:
- Başlangıç (Atama): Döngü sayacının başladığı değer (Örn:
$x = 1;). - Koşul: Döngünün ne zamana kadar çalışacağı (Örn:
$x <= 10;). - Artırım/Azaltım: Her döngü adımında sayacın ne kadar değişeceği (Örn:
$x++).
Örnek: Dinamik HTML Listesi Oluşturmak Aşağıdaki kod, HTML’deki <ol> (sıralı liste) etiketlerini kullanarak 6 maddelik bir listeyi otomatik olarak oluşturur:
<?php
echo "<ol>";
// $x 1'den başlar, 6 olana kadar döner ve her seferinde 1 artar
for ($x = 1; $x <= 6; $x++) {
echo "<li>Liste Öğesi $x </li>";
}
echo "</ol>";
?>
4. foreach Döngüsü: Listelerin (Dizilerin) İçinde Gezinmek
PHP’de birden fazla veriyi tek bir değişkende tutmamızı sağlayan “Diziler” (Arrays) adlı çok güçlü bir yapı vardır. foreach döngüsü, sadece bu diziler ve nesneler (objects) üzerinde çalışmak üzere özel olarak tasarlanmıştır.
Günlük Hayat Örneği: Arkadaşlarınızın isimlerini bir listeye yazdığınızı ve bu listedeki her bir ismi tek tek okumak istediğinizi düşünün. foreach döngüsü, bu liste üzerinde dolaşmanızı, her bir arkadaşınızın ismini alıp sırayla söylemenizi sağlar.
<?php
// Bir dizi (liste) tanımlayalım
$arkadaslar = ["Songül", "Melisa", "Murat"];
// Dizinin içindeki her bir elemanı sırayla $isim değişkenine atar
foreach ($arkadaslar as $isim) {
echo $isim . ' ';
}
// Çıktı: Songül Melisa Murat
?>
Yukarıdaki kodda, dizinin uzunluğunu (kaç elemanlı olduğunu) hesaplamamıza gerek kalmaz; foreach döngüsü dizinin başından sonuna kadar otomatik olarak bir tur atar.
5. Döngüleri Kontrol Etmek: break ve continue
Döngüler kendi belirlediğimiz koşullar bitene kadar çalışsa da, bazen dışarıdan müdahale edip döngüyü aniden durdurmak veya belirli bir adımı atlamak isteyebiliriz. Bu durumlar için döngülerdeki “joker kartlarımız” olan break ve continue komutlarını kullanırız.
break: Döngüyü tamamen kırmak (sonlandırmak) için kullanılır.continue: Döngünün o anki adımını atlayıp (pas geçip), bir sonraki adımla devam etmesini sağlar.
Örnek: Sayı sayıyorsunuz ama 5 rakamını sevmediğiniz için onu söylemeden atlamak istiyorsunuz. Ayrıca 7’ye geldiğinizde yorulup saymayı tamamen bırakmak istiyorsunuz.
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
continue; // 5'e gelince bu adımı atla ve başa dön
}
if ($i == 7) {
break; // 7'ye gelince döngüyü tamamen sonlandır (kır)
}
echo $i . ' ';
}
// Çıktı: 1 2 3 4 6
?>
Gördüğünüz gibi 5 rakamı atlandı ve döngü 7 rakamında tamamen durduğu için ekrana sadece 1 2 3 4 6 yazdırıldı.
6. İç İçe Döngüler (Nested Loops)
Tıpkı if-else yapılarında olduğu gibi, bir döngünün içine başka bir döngü yerleştirmek mümkündür. Bu yöntem özellikle satır ve sütunlardan oluşan yapılar (örneğin bir satranç tahtası veya HTML tablosu) oluştururken oldukça faydalıdır.
Örnek: Dinamik HTML Tablosu Çizmek Dışarıdaki for döngüsünü satırları, içerideki for döngüsünü ise o satırın içindeki sütunları oluşturmak için kullanabiliriz:
<?php
echo "<table border='1'>";
// Dış döngü: 3 adet satır oluşturur
for ($satir = 1; $satir <= 3; $satir++) {
echo "<tr>"; // Satır başlangıcı
// İç döngü: Her satırın içine 4 adet hücre (sütun) yerleştirir
for ($sutun = 1; $sutun <= 4; $sutun++) {
echo "<td>Satır $satir, Sütun $sutun</td>";
}
echo "</tr>"; // Satır bitişi
}
echo "</table>";
?>
Bu kod çalıştırıldığında karşımıza 3 satırlı ve 4 sütunlu (toplam 12 hücreli) mükemmel bir HTML tablosu çıkacaktır.
Özet: Hangi Döngüyü Ne Zaman Kullanmalıyım?
Hangi döngü yapısını kullanacağınıza karar vermek, çözeceğiniz probleme bağlıdır. Kısa bir karar mekanizması olarak şu rehberi kullanabilirsiniz:
- İşlemin tam olarak kaç kez tekrarlanacağını biliyorsanız:
fordöngüsünü tercih edin. - İşlemin tekrarı bir koşula bağlıysa ve bu koşulun ne zaman sağlanacağı (kaç adım süreceği) belirsizse:
whiledöngüsünü kullanın. - Koşul yanlış olsa dahi kodun ne olursa olsun en az bir kere çalışmasını garanti altına almak istiyorsanız:
do-whiledöngüsünü kullanın. - Elinizde uzun bir liste, veri tabanından gelen satırlar veya bir dizi (Array) varsa ve bu listedeki her bir elemanı sırayla incelemek istiyorsanız: Kesinlikle
foreachdöngüsünü tercih edin.
Döngüler, sizi aynı kodları yüzlerce kez yazmaktan kurtaran programlamanın cankurtaran yapılarıdır. Döngüleri de başarıyla öğrendiğinize göre, artık PHP’nin bir başka süper gücü olan verileri tek çatı altında tutmamızı sağlayan “Diziler (Arrays)” dünyasına geçiş yapmaya ve foreach döngüsünün tadını tam anlamıyla çıkarmaya hazırsınız demektir! İyi kodlamalar.





