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