While, Do While , For, Foreach Döngüleri
Bazı uygulamalarda, programın bir koşul gerçekleşmediği sürece devam etmemesi gerekebilir. Yada bir işlemin defalarca tekrar etmesi ancak her işlem sonucunun verdiğimiz parametrelerle sonuçlanması gerekebilir. Bu gibi durumlarda döngüleri kullanırız.Phpde iki tip döngü vardır: birincisi, verdiğimiz değer kadar tekrar eden for döngüsü, ikincisi de, verdiğimiz şart gerçekleşinceye kadar tekrar eden while döngüsüdür.
while do Döngüsü :
Bazen de, programın for döngüsündeki gibi, verdiğimiz değer kadar tekrar edip döngüden çıkmasını değil de, programda verdiğimiz koşul gerçekleşene kadar tekrar etmesi gerekebilir. Bu durumlarda da while do döngüsünü kullanırız. Döngünün kullanım şekli şöyledir:
işletilecek kodlar ;
}
Dikkat ederseniz, for döngüsündeki gibi, şart döngüye başlamadan önce verilmiştir. Yani şart doğru olmadığında döngü başlamayacaktır. Küçük bir örnek yapalım :
$d=1;
while ( $d <10 ) { //döngü şartımızı verdik
echo "$d . döngü "; //kaçıncı döngüde olduğumuzu belirttik
$d++; // ve her döngüde değişkenimizin bir arttırdık.
}
?>
Programı çalıştırdığınızda karşılaşacağınız ekran, for döngüsü örneğinde gördüğünüzden farksız olacaktır. İkisinde de aynı işi yaptık. Ancak fark şudur ki, for döngüsünde, kaç kere tekrar olacağını biz belirleriz, ve kullanılacak değişkenin arttırılma işlemini biz değil, program yapar. While döngüsünde ise, döngünün kaç kez tekrar edeceği belli değildir, tekrar şart doğrulanana kadar gerçekleşecektir. Döngü değişkeni kullanmışsak da, onun arttırılma yada eksiltilme işlemini biz yaparız, aksi taktirde döngü hiçbir zaman şart sağlanamayacağı için kısır döngüye girer ve biz kapatmadığımız sürece durmaz.
each kullanımı
$stringIndex2 = array("bir"=>1, "iki"=>2, "uc"=>3, "dort"=>4);
$stringIndex1 = array(1, 2, 3, 4);
list($a, $b)=$stringIndex1;
echo "$a $b"; //1 2
list($anahtar, $deger)=each($stringIndex2);
echo "$anahtar $deger"; //bir 1
list(, , $a, $b)=$stringIndex1;
echo "$a $b"; // 3 4
while(list($anahtar, $deger)=each($stringIndex2)){
echo "$anahtar => $deger"; // iki => 2 uc => 3 dort => 4
}
?>
do while Döngüsü :
while do döngüsünde şart baştadır ve şart doğru değilse döngü hiç başlatılmayacaktır. Döngünün bir kez işletilip, sonra şartın sorgulanmasının gerektiği durumlarda do while döngülerini kullanırız. Döngünün kullanımı şu şekildedir :
do {
işletilecek kodlar;
} while ( şart );
do while döngüsünün tek farkı, şartın sonda olmasıdır. Yani şart sağlansa da sağlanmasa da, döngü bloğundaki kodlar, bir kere işletilecektir. Bir tane örnek yapalım:
<?php
$a=1;
do { echo "do while döngüsü"; }
while ( $a==5 );
?>
bu programı çalıştırdığınızda, döngü şartının yanlış olmasına rağmen, döngü bloğundaki kodların bir kez çalıştırıldığını göreceksiniz.
for Döngüsü :
Bir işlemin belli bir sayı kadar tekrar etmesinin gerektiği durumlarda for döngülerini kullanırız. For döngülerinde, döngünün kaç kere tekrar edeceğini, döngüde kullanılacak değişkenin kaçtan başlayacağı ve kaçar kaçar artacağını belirttikten sonra, döngüde işletilecek kodları for bloğuna yazarız. Döngünün kullanım mantığı şöyledir :
for ( değişken tanımlama ; koşul ; değişken hızı )
{ işletilecek kodlar ; }
Şimdi, daha iyi anlayabilmek için, küçük bir örnek yapalım :
<?
for ( $degisken=1 ; $degisken<10; $degisken++ ) {
//değişkenimizin kaçtan başlayacağını, döngünün hangi koşulda sona ereceğini ve değişkenin hızını belirttik.
echo "$degisken .döngü"; // her döngüde, değişkenimizin kaç olduğunu yazmasını istedik.
}
?>
programı çalıştırdığınızda ;
1.döngü
2.döngü
3.döngü
.
.
.
şeklinde bir ekranla karşılaşacaksınız.
for döngüsü
PHP'de Web programlarımız, döngünün belirli bir sayıda olmasını ve mesela bu sayının bizim istediğimiz basamaklarda artmasını gerektiriyorsa, döngüyü for deyimiyle kurabiliriz. Ayrıca for deyimi sayaç gibi şartın yerine gelmesini sağlayacak arttırma veşa eksiltme işlemlerini kendisi yapacağı için, sonsuz döngüye girme tehlikesi de hemen hemen yoktur. Bu döngü şöyle yazılır:
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
for deyiminin ilk ögesi, döngü sayacı olarak kullanılacak bir değişken oluşkturulması ve buna değer atanmasına ilişkindir; sonra bir noktalı vrigül ile bu sayacın sınırı olan koşul belirtilir. Yine noktalı virgül ile ayırarak, sayaç değişkeninin artış hızı verilir. Bunu da yine yukarıdaki örnekle gösterelim:
for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Buradaki kod, while ve do..while göre çok daha kısa; ve while döngüsü sayacı arttırmayı sağlayan satır unutulsa bile çalışacağı halde, for döngüsü unsurlara ilişkin noktalı virgüller eksik olursa çalışmayacak ve bize böylece sonsuz döngü tehlikesini hatırlatmış olacaktır. for döngüsü kendi sayacını verdiğiniz şartı karşılayıncaya kendisi arttıracak, yani buradaki örneği göre $sayaç değişkeni 7 oluncaya kadar çalışacak ve şart karşılandığı anda, sona erecektir.
foreach
PHP'nin programcıya çok kolaylık sağlayan bir diğer döngüsü, foreach döngüsüdür. Ancak bir değişkenin bütün elemanlarını tekrar sayısında esas alan bu döngünün çalışma ilkelerini görebilmek için dizi değişken kavramını ele almış olmamız gerekiyor. Şimdilik bu döngünün varlığını bir kenara yazıp, dizi değişkenlere kadar, unutabilirsiniz.
Döngüyü sona erdirmek için: break
Programımızın akışı, bazen döngünün durdurulmasını gerektirir. Örneğin, sayaç değişkenini ziyaretçinin vermesi gerektiği ve vermediği durumda, döngünün başlamaması yerinde olur. Programın gerektirdiği böyle bir sebeple döngüyü break komutuyla durduruz.
Sözgelimi aşağıdaki kodda kullandığımız $tekrar değişkenini değerini ziyaretçiden form yoluyla aldığımızı varsayalım:
$tekrar = 10 :
for ($sayac = 1; $sayac <= $tekrar ; $sayac++ ) {
if ( $tekrar <= 0 )
break;
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Bu kod parçasını, bir sayfa kodunun içine yerleştirir ve önce bu şekliyle, danha sonra $tekrar= 0 yazarak sınarsanız, break komutunun işe yaradığını göreceksiniz. ($tekrar değişkeninin değerini, Form yoluyla ziyaretçiden değişken değeri almayı öğreninceye kadar şimdilik kaydıyla biz yapıyoruz. Ayrıca buradaki if deyiminin süslü parantez olmadan yazıldığına dikkat edin.
$Dizi = array('bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz');
$yedi=1;
while (list(, $Deger) = each($Dizi)) {
if ($$Deger) {
break; //$yedi şeklinde bir değişken varsa döngüyü bitir
}
echo "$Degern";
}
?>
Döngüyü Sürdürmek İçin: continue
break ifadesinin döngüyü tamamen durdurduğunu farkettiniz mi? Oysa programımızın akışı, kimi zaman da döngünün sadece belirli bir durumda kendisinden beklenen işi yapmamakla birlikte böyle tümüyle kesilmesini de gerektirmez. Yine yukarıdaki örneğe dönersek, sayaç değişkenini ziyaretçinin vermesi gerektiği ve vermediği durumda, döngünün tümüyle kesilmesini değil de, sadece sayacı gösteren $sayac değişkeninin sıfırdan büyük bir değere ulaşlmasını beklememiz yerinde olabilir. Bu devamlılığı continue komutuyla sağlarız:
Yine bu örnekte kullandığımız $sayaçc değişkeninin değerini ziyaretçiden form yoluyla aldığımızı varsayarak, kodu şöyle değiştirebiliriz:
$sayac = -5 :
for (; $sayac <= 7 ; $sayac++ ) {
if ( $sayac <= 0 )
continue;
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Bu durumda PHP, continue komutunu gördüğü anda for döngüsünün geri kalan kısmını icra etmek yerine başa dönecek ve döngüyü yeniden icra etmeye başlayacaktır. Döngünün ilk satırınnda kod parçasını, bir sayfa kodunun içine yerleştirir ve önce bu şekliyle, danha sonra $sayac= 1 yazarak sınarsanız, continue komutunun programı sayaç değişkeninin değeri 1 oluncaya kadar durdurduğunu ama bu sırada for döngüsünün devam ettiğini göreceksiniz. ($sayac değişkeninin değerini, Form yoluyla ziyaretçiden nasıl alacağımızı daha sonra göreceğiz.)
Buraya kadar, PHP programı oluşturabilmek için gerekli temel yazım kurallarını, yapıtaşlarını ve program akışında yararlanacağımız kontrol ögelerini ele almış olduk. Şimdi bu unsurların hepsini bir arada kullanabileceğimiz grupları, fonksiyonları ele alabiliriz.
$Dizi = array('bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz');
$yedi=1;
while (list(, $Deger) = each($Dizi)) {
if ($$Deger) {
continue; //$yedi şeklinde bir değişken varsa bu noktadan sonra döngüyü bir arttırıp devam et
}
echo "$Degern";
}
?>
while ($i < 20) { //şarta uymazsa hiç dönmez
echo '<div style="font-size: ' . ($i * 2) . 'px">While</div>';
$i++;
}
do { //şarta uymazsa en az bir kez döner
echo '<div style="font-size: ' . ($i * 2) . 'px">do-While</div>';
$i++;
} while ($i < 20);
for ($i=10; $i < 20; $i+=5) { //şarta uymazsa hiç dönmez
echo '<div style="font-size: ' . ($i * 2) . 'px">for</div>';
}
$Dizi=array ('a', 'b', 'c', 'd', 'e');
foreach ($Dizi as $Deger){
echo '<div>foreach '.$Deger.'</div>';
}