RSS

PHP döngüleri (While, for, foreach, do … while)

40 09 Haziran 2010 ~ Musa Avcı — Başlangıç

Döngüler sayesinde bir kod bloğunu istediğin kadar ard arda tekrarlayabilirsin. PHP’de 4 tane döngü mevcut, her biri aslında teknik olarak aynı şeyi yapıyor sadece kullanımları farklı. En çok kullanışlı olan While ve for döngüsüdür.

Döngüler hem çok eğlenceli, hem en işe yarar ifadelerden birisi. Sonsuz döngüye girme gibi riskleri olsa bile PHP’nin varsayılan çalışma zamanı limiti bu riski ortadan kaldırıyor.

Basit bir kod bloğu ve döngüler sayesinde harika işler başarabilirsin. Mesela toplu güncellemelerde ve liste gibi yerlerde döngüler kullanılır.

While döngüsü

While döngüsünün koşul olayı if ifadesi ile aynı diyebiliriz. İçerisine yazacağımız koşul doğru olduğunda kod bloğunu çalıştıran if ifadesinde olduğu gibi whilede aynı şeyi yapar. Tek farkı döngü olduğu için koşul doğru olduğu sürece tekrarlar.

while( koşul ) {
 // koşul olumlu olduğu sürece çalışacak kod bloğu
}

While döngüsünde sonsuz döngüye girmek çok kolay, bu yüzden kodlarken biraz dikkatli olmak lazım. Eğer koşul her zaman doğru olacak şekilde olursa while de hiç durmadan döner.

$sayi = 10;
while($sayi == 10) {
   echo 'sayi değişkeni 10 olduğu sürece bu yazı hep yazılacak';
}

Yukarıdaki örnek sonsuz döngüye girer, yani hatalıdır. Koşula $sayi değişkeni 10’a eşit olduğu sürece kod bloğunu ard arda çalıştır dedik. Döngüden önce $sayi değişkenine 10 değerini verdiğimiz için ve değerini hiç değiştirmediğimiz için döngü sonuza kadar döner.

Peki nasıl sınırlı ve kontrollü bir döngü yapacağız? Bu sorunun cevabıda gayet basit. Eğer döngü boyunca koşula yazdığımız değerlerin değişmesini sağlarsak döngüde belli bir dönüşten sonra durur. Hemen buna da bir örnek gösterelim.

$sayi = 0;
while($sayi < 5) {
   echo ' Döngü ' . $sayi;
   $sayi++;
}

Ekranda Döngü 0 Döngü 1 Döngü 2 Döngü 3 Döngü 4 yazar ve durur. Önce $sayi adında değişken oluşturup 0 değerini verdik, while döngümüzün koşulunada $sayi değişkeni 5 den küçük olduğu sürece dön dedik, kod bloğunun içerisine ise echo ile bir çıktı verdirdik ve hemen sonrasında $sayi değişkeninin değerini 1 arttırdık. Bu sayede her çalışmasında değer 1 artacak ve 5. çalışmasında duracaktır.

While için son örnek olarak birde matematiksel hesap yaptıralım:

$sayi = 1;
$sonuc = 1;

while($sayi < 10) {
   $sonuc = $sonuc * $sayi;
   $sayi++;
}

echo $sonuc;

Ekranda 362880 yazar. Burada $sonuc değişkenini her döngüde 1 arttırarak çarptık. Yani ilk olarak 1*1 sonrasında 1*2, sonra 2 * 3 … şeklinde sayı 10 dan küçük olana kadar çarptık.

For döngüsü

For döngüsü belirli sayıda dönecek olan kodların kullanımında kullanışlıdır. For döngüsüne 3 parametre girilir. Birinci parametre döngüde kullanılacak olan değişkeni ve değerini tanımlar, ikinci parametre whilede olduğu gibi koşulu belirtir, üçüncü parametre ise her döndüğünde yapacağı işlemi belirtir.

for( başlangıç; koşul; her çalışmada olacak olan ) {
   // koşul doğru olduğu sürece çalışacak kod bloğu
}

Hemen örnek bir kullanım göstereyim:

for($sayi = 0; $sayi < 5; $sayi++) {
   echo ' Döngü ' . $sayi;
}

Ekranda az önce while örneğindeki çıktı ile aynı sonucu alırız. İlk parametrede $sayi değişkenine 0 değerini atadık, ikinci parametrede koşulu belirttik ve son paramterede ise her çalışmada sayı değişkenini bir arttırmasını söyledik. Sonuç olarak böyle belli sayıda dönmelerde for en idealidir.

Foreach döngüsü

Foreach döngüsüne array döngüsü diyebiliriz. Paramtere olarak bir dizi alır, ve dizi içindeki eleman sayısı kadar döner. Sadece bir dizi ve foreach döngüsü ile güzel bir listeleme yapabiliriz. Kullanımı diğer döngülerden farklı ama basittir.

Paramterede as deyiminden sonra yazdığımız değişkene her döngüde sırayla bir eleman değerini yükler.

foreach($dizi as $eleman) {
   // dizinin tum elemanlarının sayısı kadar döner
}

Örnek kullanım:

$meyveler = array('Elma', 'Armut', 'Portakal', 'Muz');

foreach($meyveler as $meyve) {
   echo $meyve . ' Yiyin! ';
}

Ekranda Elma Yiyin! Armut Yiyin! Portakal Yiyin! Muz Yiyin! yazar.

Dizide ne kadar eleman varsa hepsini sırayla parameterede belirttiğimiz $meyve değişkenine atayarak döndürür.

Foreach anahtarları ve değerleri ile döndürme

İlk gösterdiğim kullanımda yanlızca dizideki değerlerine ulaşabiliyorduk. Şimdi dizideki hem anahtara hem de değere ulaşmak için ise “$dizi as $anahtar => $deger” şeklinde kullanacağız.

Örnek kullanım:

$bilgi['ad'] = 'Musa';
$bilgi['yas'] = 18;
$bilgi['yer'] = 'İstanbul';

foreach($bilgi as $isim => $deger) {
   echo $isim . ' : ' . $deger . ' <br/>';
}

Ekran çıktısı:
ad : Musa
yas : 18
yer : İstanbul

Foreach listeleme olaylarında en sık kullanacağımız döngülerden birisidir.

Do … While Döngüsü

Bu döngü diğerleri gibi pek fazla kullanılmaz, ama yine de bilmekte fayda var. Do While döngüsü aslında While döngüsünün koşul olayı ile aynı tek farkı; döngü koşul geçerli olsun ya da olmasın en az 1 kere çalışır. yani kod bir kere çalıştıktan sonra 2. dönmede koşulu kontrol eder, tüm espirisi budur.

do
{
   // 1 kez çalışıp sonradan koşul ile dönecek olan kod bloğu
}
while ( koşul );

Örnek kullanım:

$sayi = 20;

do
{
   echo 'Selam Dünya!';
}
while ( $sayi < 10 );

Ekranda 1 kez Selam Dünya! yazar.

Aslında while yazdığımız koşul geçersiz. Yani $sayi değişkeni 10 dan küçük değil ama do while döngüsünde koşula bakılamdan önce 1 kere çalıştırıldığı için kod bir kez çalıştırlacaktır.

Break ifadesi ile döngüleri durdurmak

Döngüleri sadece koşullar geçersiz olduğunda değil istersen break ifadesi ile istediğin yerde de durdurabilirsin. Örneğin deneme yanılma yolu ile çok uzun sürecek bir döngünün içindeyken aradığın şeyi bulduğunda döngünün daha fazla devam etmesini engelleyebilirsin.

Break türkçe anlamı kırmakdır. Yani döngüleri break ile istediğim yerde kırabiliriz. Hemen örnek bir kullanım gösterelim:

for($sayi = 0; $sayi < 100; $sayi++) {
   echo $sayi;
   if($sayi == 5) {
      break;
   }
}

Ekranda 012345 yazar.

Burada 100 kez dönecek olan bir for döngüsü yaptık ve her döndüğünde ekrana sayıyı yazmasını istedik. Ama aynı zamanda içine bir koşul daha koyduk, eğer sayi değişkeninin değeri 5 olur ise break ifadesini çalıştır. Yani 100’e kadar dönecek olan bir döngüyü break ile istediğimiz yerde durdurduk.

Şu ana kadar bu öğrendiklerimiz ile bile güzel ve işe yarar şeyler yapabilirsin. Mesela asal sayı hesaplama, hesap makinesi, kullanıcı ve üyelik sistemi, içerik listeleme sistemi vs. Bu bahsettiğim çalışmalarınıda örneğini ilerleyen zamanlarda yazılarımdan takip ederek bulabilirsin.

Bir sonraki PHP serüveninde görüşmek üzere hoşçakalın!

Etiketler:

Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.

"PHP döngüleri (While, for, foreach, do … while)" yazısı için 40 yorum yapılmış.

  1. […] PHP döngüleri. […]

  2. nuray KOKÖRLÜ dedi ki:

    anlaşılır şekilde yazdığınız için teşekkürler.

  3. İlker dedi ki:

    Detaylı Anlatım İçin Teşekür Ederim.Sayenizde PHP öğreniyorum.

  4. hanif dedi ki:

    açık bir anlatım teşekkürler…

  5. Cihan Aksu dedi ki:

    foreach’in “anahtarları ve değerleri ile döndürme” kısmında anlattıklarınız için teşekkürler, sorunumu çözdüm. Basit ama unutmuştum o metodolojiyi.

  6. Emre dedi ki:

    Çok teşekkür ederim. Anlaşılır bir şekilde açıklamışsınız.

  7. Eda dedi ki:

    Gayet anlaşılır bir biçimde olmuş ellerinize sağlık.Ben foreach konusunu hiç görmemiştim ama sayenizde ilk kez gördüğüm konuyu çok açık bir şekilde anladım…

  8. Tugay dedi ki:

    Peki bişey sorucam sonsuz bi dongu yapıp ıstedıgım şartsaglanınca donguden cıkmasını ıstıyorum tahmınımce 1 2 ay yada daha fazla surebılecek kadar buyuk bi sayı olucak cunku zaman sınırını nasıl kaldırabılırım peki hata verıorda 30 sn sora.

    • Musa Avcı dedi ki:

      set_time_limit(0) fonksiyonunu yazarak süre kısıtlamasını kaldırabilirsiniz. Ayrıca php.ini dosyasındaki “max_execution_time” değerini yükseltmeyi deneyebilirsiniz.

  9. kemal dedi ki:

    slm ustalar ben bu for döngüsü ile 2 4 6 8 9 10 11 diye sıralayamdım yardım edersenız sevinirim 🙁

  10. kadir dedi ki:

    eyvallah çok yararlı:) baştan aşağı taradım.. devamını dilerim çalışmalarınızın

  11. Doğan ERSOY dedi ki:

    Merhabalar;

    Döngülerin mantığını anlamakta güclük çekiyordum bu anlatım sayesinde mantığını oturttum 🙂

  12. nihat cin dedi ki:

    Merhabalar, her 1.5 yada 2 dakika da bir çalışan geriye sayım sayacı nasıl sonsuz hale getirilir

  13. mustafa dedi ki:

    yardımlarınız için çok teşekkür ederiz

  14. ELİF YÜKSEL dedi ki:

    emeğinize sağlık. işime çok yaradı dönem ödevini tamamladım .TEŞEKKÜRLER 🙂

  15. seda dedi ki:

    başarılar:)

  16. Uğur öztekin dedi ki:

    Çok teşekkürler.. Ne iyi birşey yapıyorsunuz.. İnsanlara faydalı olmak müthiş güzel birşey.. Başarılar…

  17. Pars Anka dedi ki:

    Musa kardeşim ellerine sağlık çok güzel bir iş yapıyorsun burada.Başarılarının devamını dilerim.

  18. Birkan Esen dedi ki:

    öncelikle teşekkürler . Şunu nasıl sağlayabileceğimi çözemedim. Bir döngüm var elimde . oluşturduğum bir divde sqlden çektiklerimi listeletiyorum. ve her div de fiyat hesaplama var buda ajax ile sayfa yenilenmemesi için . fakat döngüye girince hesaplarken hepsini aynı hesaplıyor . ben farklı farklı hesaplayıp veritabanına farklı girmesini istiyorum bunu nasıl yapabilirim

  19. recep dedi ki:

    güzel anlatım.

  20. Burak Paliç dedi ki:

    Ben bir arayüz programlamacısıyım ama hakikaten bu php kodları çok işime yarıyor

    siteme beklerim

  21. fuat kaya dedi ki:

    ben foreach konusunu anlamadım.Verdiğiniz örnekte $isim ve $deger değişkenleri yazmışsınız,ama değişkenimiz sadece $bilgi.Yani isim ve değer kısmını neye göre algılıyor onu anlamadım.Biz o örnekte $isim ve $deger değişkeni belirlemedik ki

  22. Şu an ingilizce eğitim setine bakıyorum, burada takılmıştım, çok basit anlatmışsınız, teşekkür ederim,

  23. cemil dedi ki:

    Hocam While için son örnek olarak birde matematiksel hesap yaptıralım: dediğiniz yerdeki koddan hiçbir şey anlamadım ekranda niye 362880 yazıyor, cevaplarsanız sevinirim hocam:)

  24. sim dedi ki:

    $sayi = 1;
    $sonuc = 1;

    while($sayi < 10) {
    $sonuc = $sonuc * $sayi;
    $sayi++;
    echo $sonuc."”;
    }

  25. sim dedi ki:

    Son tırnaklar arasında ya da olsun!

  26. Dilan dedi ki:

    Ellerinize sağlık çok güzel bi anlatım olmuş çok iyi anladım:)

  27. ercan dedi ki:

    bu nasıl bişe arkadaş çok kötü anlatmışsın. çoğu yanlış anlattıklarının.doğru düzgün yaz ya da hiç yazma. İNSANLARI BOŞA KANDIRIYOTSUN. AYIP YAZIK!!!!!

  28. adem dedi ki:

    Merhabalar
    Ben bir servis gibi çalışacak bir PHP kodu yazmaya çalışıyorum. Hep bir ifadede yada sayıda duracak döngülerden bahsediliyor. Acaba While ile yazılacak bir sonsuz döngü var mıdır? while(0) gibi
    Bunun örneğini verebilir misiniz?

  29. abdullah şahin dedi ki:

    mrb kolay geldin ben php yeni öğreniyorum ama kodlarımı notpeddemi yoksa dreamwerdemi yazacam anlamadım ne olur acilen cevap

  30. Sadi dedi ki:

    Bu blogu okurken anladimki Musa Avci meyve seviyor 🙂

  31. Vahid dedi ki:

    Təşəkkürlər

  32. Gül Hanım dedi ki:

    php kodlamaya yeni başladım. gayet anlaşılır…
    teşekkürler.

  33. ebru dedi ki:

    do while döngüsünü çok kısa anlatmış

  34. mehmet Savas dedi ki:

    hocam simdi bi anket sayfası düzenliyorum her soru için ayrı sayfa oluşturdum veri tabanına katta şu şekilde bir problem oluşuyor:Kayıtlar çapraz olarak hazırlanıyor her kullanıcı için tek satır kullanmak için while döngüsü kullanmam gerektiği söylendi
    hatayı nerede yapıyorum
    while($mysqlkayitno=$sayac[‘kayitno’])
    {
    echo $mysqlkayitno;
    }
    $kaydet=mysql_query(“update anketeci set soruiki=’$Soru2’where $sayac=kayitno “,$baglanti);

    • Musa Avcı dedi ki:
      $kaydet=

      ile başlayan satırı while döngüsünün içerisine yani kapatma parantezinden } önce yazmanız gerekiyor. Ayrıca mysql_query fonksiyonları yerine PDO geçmenizi öneriyorum. Çünkü o fonksiyonlar yeni PHP versiyonlarında kaldırıldı. Detaylı bilgi için https://www.phpr.org/php-data-objects-pdo/

  35. Biraz Haber dedi ki:

    Anlatım için teşekkürler bir sorum olacak .
    Api ile gelen verileri boostrap tablolarına yazdırmak istiyorum yardımcı olur musunuz?

  36. İSA dedi ki:

    SELAMÜN ALEYKÜM HERKES 2012 DEN KALMA BİZ 2019

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir