Geri Dön   Forum Ti > Programlama Dilleri ve İnternet > Web Geliştirme Dilleri
Üye Ol Üye Listesi Takvim Forumları Okundu İşaretle

Web Geliştirme Dilleri İnternet sitesi geliştirme için kullanılan araçlar ve programlama dilleri... ASP & ASP.NET & PHP & CSS & HTML & SQL & Java Script

Cevap
 
Konu Araçları
Eski 06.06.2007   #1 (permalink)
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
Varsayılan Php de Döngüler ve Diziler...

Donguler,yazdigimiz komutlarla istedigimiz bir islemi bilgisyarin yuzlerce,binlerce,ve hatta milyonlarca defa tekrarlamasidir.Biraz aciklamak istersek,eger bilgisayara bir gorevi yapmasi icin emir veriyorsak ve bilgisyar bu emri basarili bir sekilde yerine getiriyorsa neden ayni islemi dogru olarak bizim istedigimiz sayi kadar veya istedigimiz sartlar yerine gelene kadar tekrarlamasin ki?



PHP iserisinde her programlama dilinde oldugu gibi bu konu icin yazim mekanizmalari gelistirlmistir.Burada ogreneceginiz dongu yapilari size diger programlama dillerini ogrenirken de gorus olarak yardimci olacaktir.



Bu bolumde asagidaki konular icin detayli aciklamalar bulacaksiniz,





"while" dongusu, (The while loop)

"do while" dongusu ,

"for" dongusu,

Dizilerin yaratilmasi (Creating Arrays)

Dizilerden deger okunmasi

Dizilerin Indexlenmesi

Dizilerin Siralanmasi

Cok Boyutlu Diziler

Dongu ve Diziler icin pratik ornekler


Donguler



Bir onceki konuda formlar uzerinde yapilan kontrol islemleri anlatilmisti.Bu form kontrollerinde istedigimiz sartlara gore form verilerinin islenip islenmemesi gerektigine,PHP yazdigimiz "if" komutlari ile karar veriyordu.(Eger halen okumadiysaniz IF serisi yazilarimizi bastan sona okuyarak bilgi alabilirsiniz)



Dongulerde durum biraz daha degisik cunku,PHP bizim yazdigimiz sartlar olusuncaya kadar ,dongu icerisinde verilen kod grubunu calistiracaktir.Dongunun yaptigi bu herbir isleme "iteration" yani "oteleme" adi verilir.Dongunun herbir donusu bizim icin bir "iteration" dir.



while donguleri



Ilk anlatacagimiz dongu yapimiz "while".Bunun sebebi yapi olarak en basit olan dongunun "while" olmasidir.







while (sartimiz dogruysa)



{



Bu parantezlerin icersindeki kod grubunu uygula



}




Parantezlerin icerisindeki kod grubu uygulandiktan sonra eger dongumuzun en basinda verdigimiz sart halen dogrulaniyorsa,dongumuz bir kez daha calisacaktir.Bu dongu taa ki bizim dongumuzun basinda verdigimiz sart "yanlis" degerini dondurene kadar devam edecektir.







while (ay dolunay)



{



Kurtlar Uluyacak



}







yukaridaki ornekte goruldugu gibi Ay'in durumu dolunay oldugu surece kurtlarimiz uluyacak yani dongumuz calisacak )



Bir baska ornek verecek olursak ,uygulamamiz icerisinde kullanicinin kredi karti limitini asmasi durumunda "sepet"'inden bazi urunleri cikarmak istiyoruz.Asagida bununla ilgili bir kod parcasi gorulmektedir.



While ($AlisverisToplami > $KrediLimiti)



{



echo ("Kredi limitinizi astiginiz icin son aldiginiz urun sepetinizden cikarildi");



$AlisverisToplami = $AlisverisToplami - $SonAlisveris;



$SonAlisveris = $SonAldigiUrun;



}



Eger musteri kredi limitini asarsa ,son aldigi urunu iptal ediyoruz.Bunu, toplam faturasindan urunun fiyatini duserek yapiyoruz.Daha sonra $SonAlisveris degiskeni icerisinde saklanan degeri $SonAldigiUrun degiskeni ile degistirip her seferinde dongumuzde,eger kredi limiti asiliyorsa kullanicinin aldigi son urunleri birer birer spetinden cikartmis oluyoruz.



Burada dikkat edilmesi gereken nokta eger $KrediLimiti olarak verilen deger negatif olursa dongumuzun asla son bulmayacagidir.Her zaman eger dongulerle calisiyorsaniz aklinizda olmasi gereken nokta dongunun verilen degisik degerler karsisinda ne yapacagini hesaplamanizdir.(Sonsuz donguler ile ilgili aciklamayi yazinin ileryen kesimlerinde bulabilirsiniz)



Simdi yukarida acikladigimiz "while loops" yani "while donguleri" icin bir uygulama yazalim.



1.Text editorunuzu acip asagidaki kodlari yazin.



<HTML>
<HEAD></HEAD>
<BODY>
Seres Bankasi Kredi Isteme Formu



<FORM METHOD=POST ACTION="kredi3.php"
<BR>
Ne kadar kredi almak istiyorsunuz?
<BR>
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=1000>Kredi miktari 1000 TL Faiz %5
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=5000>Kredi miktari 5000 TL Faiz %10
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=10000>Kredi miktari 10000 TL Faiz %15



<BR>
<BR>



Aylik ne kadar geri odeme yapabilirsiniz?
<INPUT NAME="AylikOdeme" TYPE=Text SIZE=5>



<BR>
<BR>



<INPUT TYPE=SUBMIT VALUE="Buraya Tiklayarak Geri Odeme icin Kac Ay Gerektigini Hesaplayin">



</FORM>
</BODY>
</HTML>



2.Bu dosyayi "kredi3.html" olarak kayit edin.
3.Yeni bir text dosyaysi acip asagidaki kodlari yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Sure=0;
switch ($Kredi) {
case 1000:
$Faiz = 5;
break;
case 5000:
$Faiz = 6.5;
break;
case 10000:
$Faiz = 8;
break;
default:
echo "Bir paket secmelisiniz!";
exit;
}
while ($Kredi > 0)
{
$Sure = $Sure + 1;
$AylikNet = $AylikOdeme - ($Kredi*$Faiz/100);
if ($AylikNet<=0)
{
echo "Daha yuksek bir odeme miktari secmelisiniz!";
exit;
}
$Kredi = $Kredi - $AylikNet;
}
echo "Toplam $Sure ayda yuzde $Faiz faiz ile kredinin tamamini odemis olacaksiniz.";
?>
</BODY>
</HTML>






4.Bu dosyayi "kredi3.php" olarak kayit edin.



5."kredi3.html" dosyasini acin ve bir kac veri girin.



Ornek Dosyalar



http://www.turk-php.com/ornekler/kredi3.html



http://www.turk-php.com/ornekler/kredi3.php



Program nasil calisiyor?



Formdan gelen veriler yazdigimiz PHP programina ulastiginda su verileri kesin olarak biliyoruz,(Kullanici kisi forma bu verileri kendisi girdi.)



$Kredi
$Faiz
$AylikOdeme



Simdi ilk yaptigimiz islem kullanicin sectigi pakete gore faiz orani ve kredi miktarini programda tanimlamak.



Bunun icin "switch" komutunu kullanarak elimizde bulunan butun kosullari programin icinde tanimliyoruz..



$Kredi degiskenin alabilecegi 3 tane deger vardir.Bunlar 100,5000,ve 10000 dir.Biz bu degerleri kulllanarak program icinde $Faiz degiskeni icinde bir atama yapilmasini sagliyoruz.Bunu hangi kredi miktarini kullanici secmis ise "switch" ile tanimlarken bir alttaki satirda $Faiz degiskenine deger atayarak yapiyoruz.



$AylikOdeme miktarini da zaten kullanicimiz en basta bizim icin text alanina girmisti.



Bu noktadan sonra artik "while" dongumuzu kullanarak kisinin bu aldigi krediyi kac ayda tam olarak geri odeyebilcegini hesaplayabiliriz.



While ($Kredi >0)
{



Bu ifade ile dongumuzu baslatiyoruz.Kredi miktarimiz mutlaka sifirdan buyuk olmalidir.Zaten $Kredi degiskenimizin alabilcegi 3 tane deger var ve bunlar sifirdan farkli.o yuzden sorun cikmasi ihtimali yok.



Bir sonraki satirda programi yazmamizin amaci olan kac ayda odeyebilecegi sorusuna cevap verecek $Sure sayacimizi tanimliyoruz.Dongumuz her calistiginda bu sayac birer birer artacak.Bu degisken icerisinde ,boylece dongu sonunclaninca dongunun kac defa calistigi yani aylik odemelerin kac ayda tamamlanacagi degeri bu degiskende saklanmis olacak.Dongu mesela iki defa calisip biterse demek ki kullanici 2 ayda tum krediyi geri odemis olacak.



$Sure = $Sure + 1;



Bir alttaki satirda aylik odemelrin ne kadar olacagi hesaplaniyor.Bu deger tabiiki faiz miktari dusuldukten sonra olmalidir.Cunku kullanicinin odedigi paranin belli miktarini faize gidecek.Eger faiz hic isin icinde olmasaydi tabii ki kullanicidan gelen butun parayi ($AylikOdeme) gozununde bulundurup faiz kismini isin icine katmayacaktik.Faize giden parayi sanki kullanici hic odememis gibi dusunebilirsiniz.



$AylikNet = $AylikOdeme - ($Kredi * $Faiz/100);



yukarida gordugunuz gibi $Kredi ile $Faiz orani carpilip yuzdesi alinmakta.Bu miktari kullanicin aylik odemesinde dusmekteyiz.bu sekilde net olarak kullanicidan gelen net miktari hesapliyoruz.



Bir sonraki satirda ,



if (AylikNet <= 0)



{



echo "Aylik odeme miktarini biraz daha yuksek secmelisiniz";
exit;



}






Kod grubu ile ,kullanicidan gelen miktar eger faizi bile karsilamaya yetmiyorsa programin yapacagi islem tanimlaniyor.Eger boyle durum olursa "exit" komutu ile program sonlaniyor.(Tabii ki sonlanmadan once bir bilgi mesji ekrana gordugunuz gibi "echo" komutuyla basiliyor. )






Bir sonraki,



$Kredi = $Kredi - $AylikNet;



kod satirinda kullanicin aldigi kredi miktarindan ,odedigi miktar dusulurek yeni deger yine $Kredi degiskeninde saklaniyor.



Boylece dongumuzun bir defalik cevrim surecini aciklamis olduk.Dongumuz tum bu islemleri ,






While ($Kredi >0)



sartimiz "false" oluncaya kadar tekrarlayacaktir.Gordugunuz gibi dongunun her calismasinda $Kredi degiskeni icerisinde saklanan deger yavas yavas azalmaktadir.



(Cunku dongu her calsitiginda $Kredi = $Kredi - $AylikNet; formulu ile $Kredi degiskenin degerini dusurmektedir)



Simdi bir de sayisal ornek vererek dongunun nasil calistigini aciklayalim.



Ornek olarak kullanicin 1000 dolarlik krediyi yuzde 5 faiz ile aldigini kabul edelim.Kullanicimiz aylik 100 dolar odeyebilcegini soyluyor.O zaman degiskenlerin degerleri asagidaki gibi olacaktir.



$Kredi = 1000
$Faiz = 5
$Sure = 0
$AylikOdeme = 100



Dongumuzun en basinda ,



Kullanicinin aldigi Kredi 1000 dolar,Faiz orani 5, Aylik,Odeme 100 ve Sure 0 olacaktir.



Simdi programin ilk satiri soyle olacaktir,



while (1000>0)



Evet 1000 sayisi 0 sayisindan buyuk rahatlikla dongunun icerisndeki islemler uygulanabilir.



$Sure = 0 + 1;



Simdi $Sure degiskenimiz 1 e esit.



Bir sonraki satir,



$AylikNet = 100 - (1000*5/100);



$AylikNet = 100 - 50;



artik $AylikNet degiskenimiz 50'ye esit.



Son satirda bu degeri yerine koyuyoruz
$Kredi = 1000 - 50;



Artik $Kredi degiskenimiz 950 dir.Program en basa donerek bu degeri kontrol degeri ile karsilastiracaktir.



While (950>0)



Evet 950 sayisi 0 sayisindan buyuk rahatlikla dongunun icerisndeki islemler tekrar uygulanabilir.



$Sure = 1 + 1;



artik $Sure degiskenimiz 2 ye esit.



$AylikNet = 100 - (950*5/100);



Artik $AylikNet degiskenimiz 52.5 e esittir.



$Kredi = 950 - 52.5;



Artik $Kredi degiskenimiz 897.5 e esittir.






While (897.5>0)



Evet 897.5 buyuktur 0 dan diyerek ayni sekilde dongu taa ki $Kredi degeri 0'a veya 0 dan kucuk bir sayiya esit olana kadar devam edecektir.



Zaten $Kredi degiskeni 0 dan kucuk olunca bizim kullanicimizda Kredinin tamamini odemis demektir dogru degilmi.?



Dongumuz calismayi bitirince dongunun disindaki ilk satirdan programin isleyisi devam eder.



Ve en sonunda "echo" komutuyla "$Sure" degiskeninin icindeki deger ekrana yazilir.



"do while" Donguleri



"do while" donguleri bir onceki konuda anlatilan "while" donguleri ile benzer islemleri yapmakla beraber bir onemli fark icermektedirler.Dongunun kontrol deyimi ,dongunun sonunda yer almaktadir.Bu durum dongu yapimizin, verdigimiz kosullar ne olursa olsun en az bir kere calisacagini gostermektedir.




do
{



Bu parentezlerin icindeki kod grubunu uygula



}



while (sartimiz dogrulaniyorsa); -- geriye don ve tekrar uygula







Yukarida acik sekilde goruldugu uzere dongumuz "sartlarimiz" ne olursa olsun "do" komutu ile baslayan dongumuzu bir kez isletecek ve "while" ile verilen satirdaki "sartlara" bakacaktir.Eger sart "dogruysa" (true) geriye donerek donguyu ilk yaptigi sekilde "do" ile basyalayan yerden itibaren bir kez daha isletecektir.



Hemen bir ornek verelim,



do
{



echo ("Kredi limitinizi astiginiz icin son aldiginiz urun sepetnizden cikarildi");
$AlisverisToplami = $AlisverisToplami - $SonAlinanUrun;
$SonAlinanUrun = $SonAlinanUrundenBirOncekiUrun;



}



while ($AlisverisToplami > $KrediLimiti);



Yukaridaki ornekte ozellikle bir hata yapilmistir.Hatamiz kodlarla ilgili degil mantikla ilgilidir.Gordugunuz gibi daha kullanicinin limiti asip asmadigina bakmadan ekrana bir uyari yazisini cikarilmasiydi.Belki musterimiz limiti asti belki asmadi.Ama bu sekilde "do while" dongusu ile yazdigimiz programlarda dikkatinizi cekmek istedigimiz nokta da iste buydu.Dongunun kontrol degiskeni dongu calismaya basladigi ilk seferden sonra kontrol edilir.Dolayisi ile her halukarda musteri ekranda bu uyariyi en az bir kere gorecektir.






Bu dongu yapisini o zaman nerede kullanacagiz?Simdi size bu dongu yapilarinin nasil ve nerede kullanilcagini biraz aciklamaya calisalim.Bir mantiksal ornekle baslayalim,



do
{
Bir sonraki kavsaga kadar arabayi sur;
}
while ($Kavsak != 10);



Ozet olarak eger PHP'nin sizin icin bir islemi kesin olarak yapmasini ve ayni zamanda bir kontrol mekanizmasi ile donatilmasini istiyorsaniz bu dongu tam sizin icin yaratilmis demektir )



Bir baska ornekle bu dongunun kullanimini pekistirelim.simdi girdigimiz bir sayinin "asal" sayi olup olmadiginin arastirildigi bir uygulama yazalim.



1.Text editorunuzu acin ve asgidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD = POST ACTION="asalsayi.php">
Asalsayi olup olmadigini merak ettiginiz rakami giriniz:
<INPUT NAME="Sayi" TYPE="Text">
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE = "Buraya tiklayarak sayinin asal olup olmadigini ogrenin...">
<BR>
</FORM>
</BODY>
</HTML>



2.Bu dosyayi "asal.html" olarak kayit edin.



3.Yeni bir text dosyasi acip asagidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Bolunen = 2;
do
{



$Kalan = $Sayi%$Bolunen;
$Bolunen = $Bolunen + 1;
} while ($Kalan !=0 AND $Bolunen<$Sayi);



if (($Bolunen<$Sayi) || ($Sayi ==0)){



echo ("Sayiniz asal bir sayi DEGIL");
}



else {
echo ("Sayiniz ASAL bir sayidir.");
}



?>



</BODY>
</HTML>



4.Bu dosyayi"asalsayi.php" olarak kayit edin



5."asalsayi.html" dosyasini acip bir kez programi deneyin.



Ornek Dosyalar



http://www.turk-php.com/ornekler/asalsayi.html



http://www.turk-php.com/ornekler/asalsayi.php



Program nasil calisiyor



Ilk satirda $Bolunen degiskenini tanimladik.Ozellikle bu degiskeni 2 den baslattik cunku butun sayilar 1'e bolunebilir.



Programda $Kalan degiskeni ile ,kullanicin girdigi sayinin dongu icerisinde o andaki karsilik gelen sayiya bolumunden kalan olup olmadigina bakiyoruz.Sonucta bu islemi "mod" operatorunu kullanarak yapiyoruz(% isareti PHP de "mod" almak icin kullanilir.Bu konu ile ilgili detayli aciklama daha onceki konularda yapilmisti.Sitemizin arama fonksiyonlarini kullanarak bu yaziya ulasabilirsiniz.Veya yazimiz yazilrken veritabanindaki URL degeri http://www.turk-php.com/stories.php?.../03/01/6469641 olan linkten bu bilgiye ulasabilirsiniz. )



Kullanicinin web formundan girdigi sayi,teker teker 2 den baslayarak kendisine gelene kadar butun sayilara bolunuyor.Mesela 263 un bir asal sayi olup olmadigina bakiyorsaniz ,teker teker 2,3,4,5,6,7,8 ... sayilarina bolunuyor.Dongu her calistiginda bir sonuc cikiyor.Bu sonuc dongunun kontrol deyimi ile test ediliyor.Bu testten eger "dogru" cevabi cikarsa dongu tekrar calisiyor ve bu boyle surup gidiyor.Eger sayinin kendisine gelindiyse ve halen matematiksel olarak kalan sifira esit degilse bu demektirki sayimiz asal.Yok eger dongunun icerisinde bir sayi denenirken oldu ki kalan sifir oldu,bu da sayimizin asal olmadigini gosteriyor.Iste dongumuzun kontrol deyimide toplam bu hali test ediyor.
Bir sonraki konumuz olan "For Donguleri"'inde gorusmek uzere saglicakla kalin.


"For" Donguleri(for loops)



For donguleri belirli bir kod parcasinin sizin istediginiz sayi kadar tekrar edilmesini saglar.Bir baska deyisle sizin istediginiz sayi kadar, dongunun "iteration" yani iterasyon islemine tabii tutulmasini saglar.




for (Sayaci Kur ; Sayaci Test Et ; Sayaca Ekle Veya Sayactan Cikart)



{



Bu parantezin icerisindeki kod grubunu uygula



}







Yukarida sozu gecen "Sayac" kavrami ile dongunun kac kez calistigini hesapliyoruz.Bu "sayac" ile ayni zamanda eger belirledigimiz sayi kadar cevrim gerceklesmis ise dongumuze son veriyoruz.



Aslinda "for" dongusu kurmak sartimiz icerisinde tanimladigimiz bu uc ogenin ucunude kullanmak zorunda degiliz.Bizler PHP ogrenmeye yeni basladigimiz icin orneklerimizde bu uc ogeyide kullanacagiz.



Eger bir satirda kendi ismimizi 10 defa yazdirmak istersek simdiye kadar ogrendigimiz bilgilerle bunu nasil yapariz?



$Sayac = 0
while ($Sayac<10)
{
echo "Benim adim Serkan !";
$Sayac =$Sayac+1



}



Yukaridaki dongunun kac defa calistigini tahmin edebilirimisiniz?Sizce dongu 9 defa mi calisti?Cunku 10'a gelmeden dongu durdumu?Acaba 11 kez mi calisti cunku biz $Sayac'i 0 dan baslattik ?



Evet 10 defa calismasini istedigimiz bir dongu icin cok fazla soru degil mi?Aslinda yukaridaki dongu tam olarak 10 defa calisir.



Iste bu tip sorunlari ortadan kaldirmak icin en guzel yontem "For" donguleri kullanmaktir.






Simdi ayni islemi birde "for" dongusu kullanarak deneyelim,



for ($Sayac =1 ; $Sayac<=10; $Sayac++)
{
echo "Benim adim Serkan!";
}



Gordugunuz gibi dongunun kac defa calisacagi konusunda bir endise duymaniza gerek yok.Hepsi sizin icin $Sayac ile veriginiz sayi kadar isletilecek.



Bu dongu yapisini kullanirken ornek olarak sayacin kendisinide ekrana yazdirabilirdik,



for ($Sayac =1 ; $Sayac<=10; $Sayac++)
{
echo $Sayac;
}



Ciktimiz soyle bir sey olacakti.12345678910



Not :Burada kullanilan "$Sayac++" ifadesi "$Sayac = $Sayac + 1" ifadesi ile aynidir.Yanlizca bir kisayol olarak bu notasyon kullanilmistir.



Simdi de bir uygulama yapalim.



1.Text editorunuzu acin ve asagidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=POST ACTION="dinamik.php">
Kac tane cocugunuz var?
<INPUT NAME="Sayi" TYPE="TEXT">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
<BR>
</FORM>
</BODY>
</HTML>






2.Bu dosyayi "dinamik.html" olarak kayit edin.



3.Yeni bir text dosyaysi acip asagidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="dinamik2.php">
<?php
for ($Sayac=0 ; $Sayac<$Sayi ; $Sayac++)
{
$Oteleme = $Sayac + 1;
echo "<BR><BR>Lutfen $Oteleme numarali cocugun adini giriniz : <BR>";
echo "<INPUT NAME=Cocuk [] TYPE=TEXT";
}



if ($Sayac==0) echo"Lutfen bir tusa basarak devam ediniz";
?>
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>



4.Bu dosyayi "dinamik.php" olarak kayit edin.



5.Yeni bir text dosyasi acip asagidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Sayac=0;
echo "Cocuklarinizin isimleri :";
do
{
echo "<BR><BR>$Cocuk[$Sayac]";
$Kontrol = "$Cocuk[$Sayac]";
$Sayac = $Sayac + 1;
} while ($Kontrol != "");
if ($Sayac == 1) echo "Cocuk sayisi olarak sifir girdiniz program sonlaniyor";
?>
</BODY>
</HTML>



6.Bu dosyayi "dinamik2.php" olaraak kayit edin.



7."dinamik.html" dosyasini acip bir kac kez programi farkli degerler vererek deneyin
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla
Eski 06.06.2007   #2 (permalink)
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
Varsayılan

Diziler



Yazinin bu ilk paragrafini biraz dikkatli okumanizi tavsiye ederim.Yazinin tum anafikri bu ilk paragrafta yer aliyor



Diziler,bir tane degisken ismi altinda verilerin index mantigi kullanilarak saklanmasidir.Dizi'nin her uyesi bir element olarak tanimlanir.Dizileri de ayni degiskenlerde oldugu gibi yaratiyoruz.Bir degiskeni "dizi" seklinde kullanacagimiz zaman sadece koseli parentezleri [] eklememiz ve gerisini PHP ye birakmamiz yeterlidir.



Ornek vermek istersek,



$Eyaletler[1] = "Washington";
$Eyaletler[2] = "Florida";



Dizi icerisinde yer alan elemanlara istediginiz numarayi verebilirsiniz.



$Eyaletler[39] = "Washington";
$Eyaletler[12] = "Alaska";



Dizileri bu sekilde "numara" vererek "indexlemek" yerine karekter gruplarida kullanabiliriz.



$Eyaletler["fl"] = "Florida";
$Eyaletler["il"] = "Ilinois";



Eger bu sekilde karekterler kullanarak dizinizi indexliyorsaniz dizinin icersinde saklanan veriye ulasmak icin cift tirnak isaretlerini kullanmayabilirsiniz,



echo $Eyaletler["fl"] = "Florida";



veya



echo $Eyaletler[fl] = "Florida";



ayni seylerdir ve her ikiside problemsiz calisacaktir.



PHP'nin en guzel yanlarindan bir taneside degisik tipteki verilerin bir dizide ortak olarak kullanilabilmesidir.



$Sayi[1] = 12;
$Sayi[2] = "Oniki";
$Sayi[3] = $Degisken;
$Sayi["fl"] = $Degisken;



Ancak bu gibi kullanimlarda diziye ayrilacak hafiza buyuklugunun ne olmasi gereketigi gibi sorular nedeniyle PHP biraz yavas calisabilir!!!



Dizilerin Baslatilmasi ve Kullanilmasi



Bir diziyi baslatmak icin adini yazip koseli parentezleri eklemek yeterlidir.Indexleme problemleri gibi konularla bizim ilgilenmemize gerek yoktur.PHP tum bu islemleri otomatik olarak bizim icin yapacaktir.Yanlizca dizinin ilk ogesini yaratin arkasindan ikinciyi arkasindan ucuncuyu...bu sekilde dizinin butun ogelerini yaratabilirsiniz,



$Yazar[] = "Serkan Hadi Ceylani";
$Yazar[] = "Fatih Terim";






Koseli parentezler olmadan PHP ,ilk satirda degiskene verdigiiz degeri ikinci satirda bir sonraki deger ile degistirecektir.Bu koseli parentezler sayesinde degerlerimizi bir dizi icerisinde saklmak istedigimizi PHP'ye anlatmis oluyoruz.



Eger indexlemeyi PHP ye birakiyorsak dizinin ilk ogesi ,



$Yazar[0] = "Serkan Hadi Ceylani";



ikinci ogesi,



$Yazar[1] = "Fatih Terim";



olacak sekilde "sifirdan" baslayarak dizinin tum ogelerine birer numara atanir.PHP icerisinde diger programlama dillerinden farkli olarak,dizinin icinde saklayacagimiz veri tipini onceden bildirmemize gerek yoktur.Dizinin icerisinde yer alan elemanlarda text veya numara olarak veri saklanabilir.Yine degiskenlerde oldugu gibi PHP otomatik olarak onlarin veri tipine karar verecektir.Ikinci onemli kolaylik diziyi yaratamadan once ne kadar buyuklukte olacagina karar verme zorunlulugu olmamasi.Diger programlama dillerinde bu iki sart dizilerle ilgili bircok kisitlamayi beraberinde getiriyor.



Php icerisinde dizilere veri girisi icin iki yol bulunmaktadir.



Birincisini zaten yukarida ayrintili olarak acikladik teker teker butun dizinin elemanlarini girmek veya array () komutunu kullanmak.Simdi bu komutun kullanimina bir ornek verelim,



$Yazar = array ("Serkan Hadi Ceylani","Fatih Terim");



Tekrar ediyorum yukaridaki ornek te biz PHP'ye diziyi otomatik olarak indexlemesi icin ozgur biraktik.Index degerleri "sifirdan" baslayarak artan numaralar seklindedir.Eger "echo" komutuyla $Yazar[1] degiskeni icerisinde saklanan degeri gormek isteseydik ekranda "Fatih Terim" yazdigini gorecektik.



Dizilerin boyutunda herhangi bir sinirlama yoktur.Dolayisi ile soyle bir kod yazabiliriz,



$Eyaletler = array ("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");






Bizler yukarida dizinin butun ogelerini PHP'nin otomatik olarak indexlemesini sagladik.Boyle bir kodu yazdigimiz zaman PHP dizinin ilk ogesini (Alabama Eyaleti) "0" degeri ile indexler.
Amerika Birlesik Devletleri'nde toplam 50 eyalet vardir.Gordugunuz gibi son eyalaet boyle bir dizide "49" degeri ile indexlenecektir.Cunku ilk degerimiz icin index degeri "0"dir. Bu durumda dizinin belirli bir sayidan baslanarak otomatik olarak indexlenmesini istiyorsaniz,






$Eyaletler = array (1 => "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");



yukarida goruldgu sekilde "=>" operatorunu kullanmalisiniz.Ardindan gelen sayi dizimizin indexlenmeye baslanacagi degerdir.Ben diziyi 1 den baslayarak indexlemek istedim cunku tum bu elemanlarin ekranda bir dokumunu almak istedigim zaman artik biliyorum ki 1.eyalet Alabama ve 50.Eyalet Wyoming olacaktir.



Eger cok uzun diziler kullaniyorsaniz tabii ki dizinin her ogesi icin bir index degeri belirleyebilirsiniz.



$Eyaletler = array ("al" => "Alabama","ak" => "Alaska","az" => "Arizona","ar" => "Arkansas","ca" => "California","co" => "Colorado", "ct" => "Connecticut", "de" =>"Delaware","fl" => "Florida","ga" => "Georgia", "hi" =>"Hawaii", "id" =>"Idaho","il" => "Illinois", "in" =>"Indiana", "ia" =>"Iowa", "ks" =>"Kansas", "ky" =>"Kentucky", "la" =>"Louisiana", "me" =>"Maine","md" => "Maryland","ma" => "Massachusetts","mi" => "Michigan", "mn" =>"Minnesota", "ms" =>"Mississippi","mo" => "Missouri", "mt" =>"Montana", "ne" =>"Nebraska","nv" => "Nevada", "nh" =>"New Hampshire", "nj" =>"New Jersey","nm" => "New Mexico","ny" => "New York","nc" => "North Carolina","nd" => "North Dakota","oh" => "Ohio", "ok" =>"Oklahoma","or" => "Oregon", "pa" =>"Pennsylvania","ri" => "Rhode Island", "sc" =>"South Carolina","sd" => "South Dakota","tn" => "Tennessee","tx" => "Texas", "ut" =>"Utah","vt" => "Vermont","va" => "Virginia","wa" => "Washington","wv" => "West Virginia", "wi" =>"Wisconsin","wy" => "Wyoming");






yavas fakat isinizi orecek bir cozum.



Dizi Boyunca Iterasyon (Iterating Through an Array )



Diziyi bir kere yarattiktan sonra her seferinde geriye donup teker teker onlari cagirmaya gerek yoktur.Bu bize extra bir suru is yuku getirecektir.Iste bu noktada bir konu once ogrendigimiz donguler devreye girecektir.Eger yukarida yaratilan "eyaletler" dizisinin butun elemanlarini web sayfasinda goruntulemek isteseydik uc satirlik kod ile bu isi cozumlemis olacaktik.



for ($sayac=1;$sayac<51;$sayac++) {
echo "<BR>$Eyaletler[$sayac]";
}



dongumuz 1 den baslayarak 50 ye kadar sayacak ve her donusunde amerikanin bir eyaletini ekrana yazacaktir.



Not : "<BR>" bir HTML tagidir ve her seferinde yeni bir satir yaratmak amaciyla kullanilmistir.



Dongunun calismasini acik sekilde yazacak olursak,



echo "<BR>$Eyaletler[1]";
echo "<BR>$Eyaletler[2]";
echo "<BR>$Eyaletler[3]";
echo "<BR>$Eyaletler[4]";
......
.......



Ayni amaca ulasmak icin "while" dongusunu kullanmak isteseydik bir kac satir fazla kod yazacaktik,



$sayac=1;
while ($sayac<51) {
echo "<BR>$Eyaletler[$sayac]";
$sayac=$sayac+1;
}






Simdi de bir uygulama yazalim.



1.Text editorunuzu acin ve asagidakileri yazin.
<HTML>
<HEAD></HEAD>
<BODY>
<FORM ACTION="baskentler.php" METHOD=POST>
Hangi eyaletin baskentini ogrenmek istiyorsunuz?
<SELECT NAME=Eyalet>
<?php



$Eyaletler = array (1 => "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");



for ($sayac=1;$sayac<51;$sayac++) {
echo "<OPTION>$Eyaletler[$sayac]</OPTION>";
}
echo "</SELECT><BR><BR>";
for ($sayac=1;$sayac<51;$sayac++) {
echo "<INPUT TYPE = HIDDEN NAME='GizliEyalet[]' VALUE = '$Eyaletler[$sayac]'>";
}
echo "<INPUT TYPE=SUBMIT></FORM>";
?>
</BODY>
</HTML>



2.Bu dosyayi "eyaletler.php" olarak kayi edin.



3.Yeni bir text dosyasi acip asagidakileri yazin.



<HTML>
<HEAD></HEAD>
<BODY>
<?php
$EyaletBaskenti = array (0 => "Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento","Denver","Hartford", "Dover","Tallahasse", "Atlanta", "Honolulu", "Boise", "Springfield","Indianapolis", "Des Moines", "Topeka", "Frankfort", "Baton Rouge","Augusta","Annapolis","Boston", "Lansing", "Saint Paul","Jackson", "Jefferson City", "Helena","Lincoln", "Carson City","Concord", "Trenton","Santa Fe", "Albany", "Raleigh","Bismarck","Columbus","Oklahoma City", "Salem", "Harrisburg", "Providence", "Columbia","Pierre", "Nashville", "Austin","Salt Lake City", "Montpelier","Richmond","Olympia","Charleston" , "Madison","Cheyenne");



for ($sayac=0;$sayac<50;$sayac++) {



if ($GizliEyalet[$sayac] == $Eyalet)
{
echo "Sectiginiz eyaletin baskenti $EyaletBaskenti[$sayac]";
}



}



?>
</BODY>
</HTML>



4.Bu dosyayi "baskentler.php" olarak kaydedin.



5."eyaletler.php" dosyaysini acip bir deneme yapin.


Sirali olmayan index yapili dizilerin Iterasyonu†



Diziyi duzgun olarak siraladiginiz(indexlediginiz) zaman cogu islemi yapmak gercekten kolay olacaktir.Birde asagidaki gibi bir diziye sahip oldugumuzu varsayalim,



$Dizimiz[3569]="Gercekten buyuk degilmi";
$Dizimiz[1]="Gerceken kucuk";
$Dizimiz[599]="ehh iste normal bir sayi";



Simdi PHP'nin bize dizilerle ilgili sundugu fonksiyonlari ogrenerek belirli kaliplara bagli kalmaktan kurtulup her turlu dizi islemini gerceklestirebilecegiz.



current ve key fonksiyonlari



Dizi icerisinde hangi elementin o anda kullanildigini gormek icin current (), bu elementin index degerini bulmak isterseniz key () fonksiyonunu kullanmalisiniz.



Hemen cok kucuk bir kod parcasi uzerinde PHP'nin yeni ekledigimiz dizi elementlerine hangi indexi otomatik olarak verdigini gorelim.



$Yonetmen[4]="Yilmaz Guney";
$Yonetmen[1]="Clint Eastwood";
$Yonetmen[93]="Steven Spielberg";
$Yonetmen[24]="Al Pacino";



Asagidaki iki satir kodu eklersek "$Yonetmen[]" dizisi icin o anki gecerli index degerini gorebiliriz.



$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);



Boyle bir programin ciktisinda "key ()" fonksiyonu "4" degerini dondurecek ve echo komutuyla ekrana yazilacaktir.



Gordugunuz gibi o anda gecerli olan index degeri dizinin ilk elemanini bize gosterdi.



Eger current () fonksiyonunu kullanmis olsaydik dondurecegi deger "Yilmaz Guney" olacakti.



$GecerliIcerik = current ($Yonetmen);
echo ($GecerliIcerik);



Simdide bir satir daha ekleyelim dizimize ve bakalim PHP hangi indexi verecek bu yeni eklenen dizi elementine,









$Yonetmen[] = "Mel Gibson";



"Mel Gibson" index degeri "94" olarak dizimiz icerisinde yer alacakti.current () ve
key () fonksiyonlarini kullanarak,dizi icerisinde ekleyecegimiz bir sonraki elemente hangi index degerinin verilecegini nasil bulabiliriz?Yazimizi okumaya devam edin



Next () ve Prev ()



Diziye eklenen yeni elemanlarin index degerini bulmak icin next () ve prev () fonksiyonlarini kullanabilirsiniz.Bu fonksiyonlar dizi boyunca elementler arasinda dolasmanizi saglarlar.(These functions allow you to navigate through arrays,by moving the pointer to the next or previous element in the array).Bu iki fonksiyonda,argument olarak dizi ismini alirlar.Yani hangi fonksiyonun elementleri arasinda gezinmek istiyorsaniz fonksiyonu,o dizinin adini vererek kullanmalisiniz.



Simdi bir onceki konuda yarattigimiz diziyi ele alalim ve bu fonksiyonlari uygulamali olarak gorelim,






$Yonetmen[4]="Yilmaz Guney";
$Yonetmen[1]="Clint Eastwood";
$Yonetmen[93]="Steven Spielberg";
$Yonetmen[24]="Al Pacino";
$Yonetmen[] = "Mel Gibson";



next () fonksiyonunu, current elementimizin,



Asagida YORUM ile belirtilmis yerlerin tamami yazara aittir ve dogrulugu konusunda garanti verilemez.Yanlizca konunun daha iyi anlasilmasi icin okuyabilirsiniz.Eger olayi anladiysaniz yaziya kaldiginiz yerden yorumlari okumadan devam ediniz.



--->YORUM : (yani yukaridaki dizide gordugunuz gibi dizinin ilk elementi.Bu ilk element 4 numarasiyla indexlenmis ve icerigi de Yilmaz Guney.Simdi dizideki islemleri gozunuzun onunde canlandirmak isterseniz bir kaset calar dusunun o sirada calmaya hazir sarki tabii ki kasedin ilk sarkisidir.Eger biz kasedi kullanir ve birinci sarkiyi dinlersek artik bir sonraki sarki calmaya hazirdir degilmi.Iste burada bahsedilen current element bizim o nda kullanilmaya hazir olan dizi elementimizdir. Guzel bir yaklasim simdi aklima geldigi icin yaziyorum.Biraz olsun sizi current'dan next'ten kurtarip olayi anlatabildiysem ne alaaa anlamadiysaniz lutfen mail atin )






ne oldugunu kontrol etmeden kullanalim ve sonuca bakalim,






--->YORUM : (dizi su anda hic kullanilmadigi icin ilk sarkimiz calmaya hazir.Yani dizinin ilk elementi current element.Eger bir dongu icerisinde islem gerceklistiriyor olsaydik ve dizinin elemanlari birer birer kullaniliyor olsaydi,islemin belirli asamlarinda dizinin hangi index numarali elementi current olacakti veya gercekten o asamada sizin istediginiz element mi kullaniliyor.Tum bu islemler icin dogal olarak iste burada verilen komutlari kullaniyoruz.)






next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);



Bu kucuk programimizin ciktisi "1" olacaktir.Cunku next fonksiyonu cagrilmadan once current elementin index degeri "4" tu.Yani dizinin ilk elemaniydi.Biz next ($Yonetmen); diyerek dizi icerisindeki bir sonraki elementi kullanima hazir hale getirdik.Sonrasinda $IndexDegeri degiskeni icerisnde key($Yonetmen) fonksiyonu ile verdigimiz degerin saklanmasini sagladik.echo ($IndexDegeri) komutu ile de ekrana yazdirdik.









next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);






Gordugunuz gibi fonksiyonu uc defa daha kullandim simdi artik echo komutu ile ekrandan alacagimiz cikti "94" olacaktir.Eger bu index numarali elemnetin icerigini ekranda yazdirmak isteseydik,



$GecerliIcerik = current ($Yonetmen);
echo ($GecerliIcerik);



"Mel Gibson" ciktisini alacaktik.



prev () fonksiyonun kullanimida tamamen yukaridaki ile aynidir.Bu fonksiyonla dizi icerindeki elementler arasinda "geriye" dogru gezinmemizi sagliyoruz.






next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
prev ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);






Kod grubunun ciktisi "24" olacaktir.Dizi icerisinde once dort element ileriye dogru gidip o elementin "current" olmasini sagladik.Sonra prev ($Yonetmen); satiri ile dizi icerisinde bir element geriye gittik.Diger satirlarda ise iste o elementin "index" degerini ekrana yazdirdik.



Simdi burada bir konuyu belirtelim.Eger dizimiz icerisnde mesela ikinci "next" satirinda dizimizin sonuna gelmis olsaydik ne olacakti.Ondan sonraki kodlar hata uyarisi verecekmiydi?Bu sorunun cevabi kesinlikle HAYIR'dir.Boyle bir durumda hic bir sey olmayacakti.Kodumuz hic bir hata vermeyecegi gibi hic bir degerde dondurmeyecekti.Yeterince centilmence degilmi



Baska programlama dillerinde bu durumdaki bir program mutlak hata dondurur.PHP ile calismak icin iste size bir baska neden.Gercekten de mukkemmel bir programlama dili.



prev ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);



Kod grubuda ayni sekilde hata dondurmeyecektir.Gordugunuz gibi daha dizinin basinda dizideki elementi bir geriye almak istedik.This would still return nothing at all.



list ve each fonksiyonlari



Bu iki fonksiyonla dizimiz icerisinde yanlizca "veri iceren" element'lerin kullanimini sagliyoruz.Bir dongumuz icerisinde mesela "bos" icerige sahip elementlerin kullanilmasini istemiyor olabiliriz.Bu durumda dizi icerisindeki butun veri iceren elementleri cok kolayca ekranda gosterebiliriz.Mesela "while" dongusu icin asagidaki kodu yazabiliriz,



while (list(IndexDegerimiz,ElementinIcerigi) = each (DizininAdi)



Yukaridaki satir diyorki : DizininAdi ile verilen dizi adindaki herbir elementin "index" degerini IndexDegerimiz'e , iceriginide ElementinIcerigi'ne esitle.Eger yanlizca index degerinin veya iceriginin dondurulmesini istiyorsaniz,






while (list(IndexDegerimiz) = each (DizininAdi)



veya



while (list(,ElementinIcerigi) = each (DizininAdi)






Ornegimizle verilen kucuk kod parcasi uzerinde uygulamali olarak gosterirsek,



while (list($IndexDegeri,$GecerliIcerik) = each ($Yonetmen))
{
echo "<BR>$IndexDegeri - $GecerliIcerik";
}



String index yapili dizilerin Iterasyonu‡



Karekterler ile indexlenmis dizilerin elementleri arasinda dolasmak, yukarida aciklanan numara ile indexlenmis diziler arasinda dolasmak ile aynidir.Bi kac fark bulunmaktadir tabii ki ama mantik hepsinde aynidir.Simdi bir kod parcasi uzerinde farkliliklari anlatalim.



$EyaletBaskenti["ga"]="Atlanta";
$EyaletBaskenti["il"]="Springfield";
$EyaletBaskenti["ca"]="Sacramento";
$EyaletBaskenti[]="Cheyene";



"Cheyene" ile verilen deger dizi icerisinde $EyaletBaskenti[0] ogesi olarak saklanacaktir.Gordugunuz gibi index degeri "0" dir.PHP'nin dizinin bu ogesi hakkinda herhangi bir bilgiye sahip degildir ve index olarak sifir degerini atamasi cok da supriz degildir.Eger herhangi bir elemente numara vererek indexlemis olsaydik ondan sonra gelecek ilk sayinin numarasi bu indexi verilmeyen elemente atanacakti.Su anda dizide numara ile indexlenmis bir deger olmadigi icin sifir verilerek bu element indexlendi.



current () ve key () fonksiyonlari yine ayni sekilde kullanilacaktir.Herhangi bir fark yoktur.



$HangiEyalet = current ($EyaletBaskenti);
$HangiKisaltma = key ($EyaletBaskenti0;
echo "$HangiEyalet - $HangiKisaltma";



Bu kodun calistirilmasi halinde "Atlanta - ga" seklinde bir ciktiyi ekrandan alirsiniz



next () ve prev () fonksiyonlari yine ayni sekilde kullanilacaktir.Herhangi bir fark yoktur.



$EyaletBaskenti["ga"]="Atlanta";
$EyaletBaskenti["il"]="Springfield";
$EyaletBaskenti["ca"]="Sacramento";
$EyaletBaskenti[]="Cheyene";
next ($EyaletBaskenti);
$HangiEyalet = current ($EyaletBaskenti);
$HangiKisaltma = key ($EyaletBaskenti0;
echo "$HangiEyalet - $HangiKisaltma";



Bu kodun calistirilmasi halinde "Springfield -il" seklinde bir ciktiyi ekrandan alirsiniz



array () fonksiyonuda yine ayni sekilde kullanilacaktir.Herhangi bir fark yoktur.



$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");



list () ve each () fonksiyonlari yine ayni sekilde kullanilacaktir.Herhangi bir fark yoktur.



while (list($EyaletKisaltmasi,$EyaletIsmi) = each ($EyaletBaskenti))
{
echo "<BR>$EyaletKisaltmasi - $EyaletIsmi";
}



Not : Yukarida kullanilan $EyaletKisaltmasi,$EyaletIsmi degiskenleri yerine istediginiz bir degisken ismi yazabilirsiniz.Burada onemli olan "each" ile verilen $EyaletBaskenti dizisinin adidir.



Yani ,



while (list($SerkanMakinecidir,$OzgurHiyariElektronikcid ir) = each ($EyaletBaskenti))
{
echo "<BR>$SerkanMakinecidir - $OzgurHiyariElektronikcidir";
}



yazmak tamamen ayni seylerdir her ikisininde ciktisi soyle olacaktir.



ga - Atlanta
il - Springfield
ca - Sacramento
wy - Cheyene






Dizilerin Siralanmasi



Dizilerin siralanmasi icin PHP icerisinde bircok fonksiyon bulunmaktadir.Bizler bunlarin arasindan en cok kullanilan 5 tanesini inceleyecegiz.Burada anlatilan fonksiyonlar genel olarak kullanilmaktadir.



sort ()



En temel siralama fonksiyonudur. Dizinin icerisindeki elementleri iceriklerine gore alfabetik olarak siralar.Argument olarak siralanacak dizi isminin verilmesi yeterlidir.



sort (DizininAdi)



Ornek vermek istersek ,



$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");



Yonetmenlerimizin isimlerinin yer aldigi boyle bir diziyi siralamak istersek,



sort ($Yonetmen);



yazmamiz yeterli olacakti.






Bu islemin sonucunu ekranda gormek icin yine list () ve each () fonksiyonlarini kullanabiliriz.



$Yonetmen[0]= "Orson Welles"
$Yonetmen[1]= "Carol Reed"
$Yonetmen[2]= "Fritz Lang"
$Yonetmen[3]= "Jacques Tourner"



siralamadan sonra ,



$Yonetmen[0]= "Carol Reed"
$Yonetmen[1]= "Fritz Lang"
$Yonetmen[2]= "Jacques Tourner"
$Yonetmen[3]= "Orson Welles"



olacaktir.



Peki dizimizi boyle numaralar ile indexlemek yerine karekterler kullanarak indexlemis olsaydik (yani harf gruplari kullanarak indexleseydik)?



asort ()



Karekterler ile indexlenmis dizileri elementlerinin iceriklerine gore siralamak icin kullanilir.Sunu sorabilirsiniz sort () fonksiyonuda ayni isi yapiyordu?Cevap icin asagidaki kod orneklerine ve aciklamalara bakin.






Simdi eyaletler dizimizi ele alalim,



$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");



Dizimiz boyle bir kodun ardindan dogal olarak asagidaki gibi yaratilacaktir



$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["wy"]= "Cheyene";



eger sort () kullanarak siralamis olsaydik son durum soyle olacakti,



$EyaletBaskenti[0]= "Atlanta";
$EyaletBaskenti[1]= "Cheyene";
$EyaletBaskenti[2]= "Sacramento";
$EyaletBaskenti[3]= "Springfield";



diger bir deyisle harfler kullanarak indexledigimiz dizimizde,bu harfler numaralarla degistirilecekti.Bunu engellemek icin mutlaka asort () kullanilmalidir,



asort ($EyaletBaskenti);



komutunu verdikten sonra artik dizimiz asagidaki sekilde siralanacaktir.



$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["wy"]= "Cheyene";
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["il"]= "Springfield";



ekranda siralamanin nasil degistgini gormek icin tabii ki list () ve each () fonksiyonlarini "while" dongusu ile su sekilde kullanabilirsiniz,



while (list($EyaletKisaltmasi,$EyaletIsmi) = each ($EyaletBaskenti))
{
echo "<BR>$EyaletKisaltmasi - $EyaletIsmi";
}






rsort () ve arsort() fonksiyonlari



Bu iki fonksiyonda amac olarak sort () ve asort () fonksiyonlarina benzerdir.Tek farki dizi elementlerinin iceriklerini alfabenin tersi yonunde siralamalaridir.



$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");
rsort ($Yonetmen);



ve ayni sekilde kareketer kullanilarak yaratilmis diziler icinde ,



$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");
arsort ($EyaletBaskenti);



Ciktilari icin ornek vermek istemiyorum herhalde buaraya kadar olan bolumu okuduysaniz anlamissinizdir.



ksort ()



Karekter dizisi kullanilarak yaratilmis diziler icin,"indexleri" kullanarak alfabetik olarak siralama yapar,



$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");
ksort ($EyaletBaskenti);



kodumuzun sonunda dizimiz su sekilde siralanacaktir,



$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["wy"]= "Cheyene";



Her turlu soru ve oneriniz icin mail atabilir veya bu yazinin yayinlandigi sayfadaki yorum bolumunu kullanabilirsiniz.



Serkan Hadi Ceylani
serkan@turk-php.com



† : "Iteration" kelimesinin tam turkcesi "yinelemek"tir.Gordugunuz gibi burada bu sekilde kullanilirsa anlamsiz bir seyler cikiyor.O nedenle "iterasyon" olarak kullanilmistir.Okuyucudan kendine ozgu bir anlam cikarmasi beklenmektedir.Sonuc olarak turkce olmayan bir teknoloji aciklanmaya calisilmaktadir.



‡ : "String" kelimesinin tam turkcesi "sicim"dir.Programcilik literaturunde "duz yazi" veya "text" anlamina gelecek sekilde kullanilmaktadir.Okuyucudan konu ile ilgili arastirma yapmasi beklenmektedir.Sonuc olarak turkce olmayan bir teknoloji aciklanmaya calisilmaktadir

C ve Java dillerinde,birden fazla boyuta sahip dizi tanimlamak gercekten de ileri seviye uzmanlik gerektiren kavramlardir.PHP de ise bu konu icin,kimsenin basini agritmadan kisaca tanimlanabilcek ve uygulanabilecek yazim kurallari gelistirilmistir.Bir diziye istediginiz kadar cok boyut katabilirsiniz.



PHP icinde bir diziyi kullanirken ona iki'den fazla boyut katmak,cok ta guzel bir programcilik teknigi degildir.Bu hem sizin hemde PHP nin yapisi itibari ile bir cok extra yuku beraberinde getirir.Sizin icin, kodun sonradan baska kisiler tarafindan bakiminin zorlasasmasi ,sunucu icin ise kaynaklarinin yok edilmesi bakimindan onemli ve dusunulmesi gereken,ve hatta mumkunse iki den fazla boyut icin kacininlmasi gereken programlama teknikleridir...



Size daha iyi fikir vermesi amaciyla,bu konu icin ozel hazirlanmis grafik ve belgelere asagidaki linke tiklayarak ulasabilirsiniz.



http://www.turk-php.com/ornekler/doc...oy_diziler.doc



Simdi de orneklerle konuyu aydinlatmaya calisalim:



<?php



$ornek_dizi = array("Ambalajlar" => array("kagit","plastik"),"Urunler" => array("et", array("sut","yumurta")));
print $ornek_dizi["Ambalajlar"][1];
//ekrana plastik yazdirdim...
print $ornek_dizi["Urunler"][2][1];
//ekrana sut yazdirdim...
?>


kaynak:turkphp.com
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla
Cevap


Şu Anda Konuyu İnceleyen Aktif Kullanıcılar: 1 (0 üye ve 1 misafir)
 
Konu Araçları


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Php de Çok Boyutlu Diziler İle Çalışmak... staticiation Web Geliştirme Dilleri 0 08.06.2007 15:59
C de Diziler(Güzel Anlatım)... staticiation Programlama & Geliştiriciler için 0 04.06.2007 22:51
ASP Döngüler maChaRa Web Tasarım 0 23.05.2007 09:38


Şu anki forum saati: 22:39.


cnt hizmet sağlayan firma
ForumTi.com'un yapımı ve yayınlanması CNT'ye aittir.
Sitedeki içerikleri foruma ücretsiz şekilde üye olabilen ziyaretçiler oluşturur. Bu içeriklerin sorumluluğu yazana aittir.
Eğer yasak ve aykırı içerik tespit edilirse site yöneticilerine bu konular bildirilir ve kaldırılır. Site yönetimi haberdar edildiğinde sonuç alınamaz ise servis sağlayıcı CNT'ye bildiride bulunabilirsiniz.
vBulletin® v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Search Engine Friendly URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265