PHP - Dersleri 3

Abdullah Şahin

Altın Üye
Altın Üye
Kayıt
3 Nisan 2008
Mesaj
2.630
Tepki
89
PHP'de diziler (arrays)

Diğer dillerden birşeyler bildiğinizi düşünerek dizinin ne olduğunu anlatmayacağım. Yok o bize yakışmaz :) En iyisi anlatmak, daha önce değişken (variable) olayını kavradıysanız diziyi size şöyle tanıtabilirim. Normalde bildiğimiz değişkenler aynı anda tek değer alırlar. Yani bir değişkenin sadece bir değeri olabilir. Dizilerde birer değişkendir ama biraz daha farklılar. Birden çok değeri içlerinde barındırırlar. "Eee.. Tamam iyi de ne işime yarıyacak bu???" diye sormadan siz, ben niye kullanacağın(m)ızı anlatayım. Aynı tipte aynı amaca hizmet eden bazı bilgilerimiz var, mesela araba markaları:

Markalar:

Mercedes
BMW
Jaguar
Fiat
Wolkswagen (yanlış yazdım sanırım)
Toyota
...


Biz bunları önceden tanımlıyoruz ve markaların hepsini belirlemiş oluyoruz. Daha sonra biz bir markaya erişmek istediğimiz zaman sadece o markanın dizide kaçıncı eleman olduğunu söyleyerek ona ulaşabiliyoruz. İşte mantalite bu. (Amma exantrik laflar kullanırım bea!)

Dizi kavramında bir diğer olay da index anahtarı (index key) dediğimiz olaydır. Bu olay bizim (yukardaki örneğe istinaden) markalara verdiğimiz kod isimler veya sıra numaraları oluyorlar. Biz onları tanımlamazsak 0'dan başlayarak PHP onlara birer index no veriyor sırasıyla...

Hadi bakalım, İşe koyulma zamanı geldi!
PHP'de dizi tanımlamanın birkaç farklı yöntemi var.

array fonksiyonu yardımı ile dizi tanımlamak;
Array fonksiyonu bir dizi yaratmak (düzenlemek için değil) için kullanılıyor. hemen bir örnek:

$dizi=array("Ahmet","Burcu","Can");

Bu şekilde diziyi tanımlamış oluyoruz.

"Can" değerine eğişmek için $dizi[2] diyoruz. Bakın PHP 0'dan başlayıp hepsine bir numara vermiş dii mi?

"Peki biz bu anahtarları nasıl istediğimiz şekilde belirleyeceğiz?" sorusunun cevabı da:

$dizi=array("A"=>"Ahmet","B"=>"Burcu","C"=>"Can");

olacaktır.

Anlayacağınız array fonksiyonu olayı böyle birşey.

sorusu olan???

Benim var:
Ben önceden tanımladığım dizi için bir daha bu yöntemi kullanırsam nolur???
cevap:
Dizi sıfırlanır ve yeni değerlerle baştan yaratılmış olur.

Diziyi direk tanımlamak;
Uzun uzun açıklamayacağım. Bizler zeki insanlarız anlarız :) Dizi elemanlarına normal değişkenlermiş gibi direk değerlerini yüklüyoruz oluyor bitiyor. Örnek versem daha iyi anlayacağız heralde.


$dizi[]="Ahmet";
$dizi[]="Burcu";
$dizi[]="Can";


İşte bu şekilde... Bu ifade ilk array fonksiyonu örneğindekiyle aynı yere çıkıyor. Ayrıca anahtarlarımız da aynı oluyor. Yani "Can" değerine eğişmek için yine $dizi[2] diyoruz. Ama tanımladığımız sıraya dikkat edin. Hani sırada verirseniz o sıraya göre anahtar verir.

Bir açıklama; $dizi[]=... diye başlarsanız satıra, her seferinde $dizi dizisine bir eleman ekliyorsunuz demektir. [] arasında bir değer olmadığına dikkat edin. PHP siz anahtar vermediğiniz için kendisi boştaki ilk anahtarı veriyor değere.

"E, peki..." sorunuzu Leb demeden Lebleyim ben...


$dizi["A"]="Ahmet";
$dizi["B"]="Burcu";
$dizi["C"]="Can";


Bu şekilde tanımlıyoruz işte anahtarlı dizi elemanlarını. Bu ifade 2. array fonksiyonu örneğindekiyle aynı yere çıkıyor yine...

Yine bir açıklama; $dizi["A"]=... gibi bir ifadeyle başlarsanız satıra, "A" anahtarıyla tanımlanmış bir eleman varsa o elemanı değiştiriyorsunuz, yoksa da yaratıyorsunuz demektir.

Evet işte olay budur... Bu mudur? Budur... dur dur dur!!

Hemen lafı uzatmadan ve faturayı da kabartmadan (sizin için de geçerli) örnekleyelim bu meseleyi ha??


<html>
<body>

<?

$dizi=array ( "Mercedes", "BMW", "Jaguar", "Fiat", "Woswos", "Toyota" );
// 6 eleman var. Saydım da söylüyorum. (// ile başlayan satırlar açıklama satırı olur. Eklemiş olayım daha önce söylememişsem...)

for ( $i=0; $i<6; $i++ ){
echo $i."-".$dizi[$i]."<br>";
}

?>

</body>
</html>


Örneğimizin sonucunu merak edenlere de örneğin sonucunu vereyim:


1-Mercedes
2-BMW
3-Jaguar
4-Fiat
5-Woswos
6-Toyota


Evet, anladınız mı bakiim?? ben anladım...

Açıklamayı unuttuğumu sanmayım:
Array fonksiyonunu kullanarak diziye 6 eleman tanımladık. İndis (anahtar) belirtmedik ve PHP de 0'dan başladı ve en son elemana da 5 anahtarını atadı.
Daha sonra bir for döngüsü ile 0'dan 5'e kadar döndük ve her dönüşümüzde de (dönüş=iterasyon exantriklik meraklılarına) döngü değişkeni ile ilgili dizi elemanını yazdırdık.

Evet örneğimizi de anladığımıza göre biraz daha derine inme zamanı geldi ama önce çok sevdiğim bir dostumla tanıştırmak istiyorum sizi;

Foreach

Foreach bildiğimiz for döngüsüne benzer. Ama foreach'in bütün esprisi bir dizideki eleman sayısı kadar iterasyon yapmasıdır. Her bir iterasyonda dizideki sıradaki elemanı bize verir, ve biz de ihtiyacımız doğrultusunda işlemler yaparız...


foreach ( Dizi as Dizi Elemanı ) {

yapılacak iş

}


Pek tanışık olmadığımız bir kullanım evet... Biraz açıklayalım o zaman...

Dizi dediğimiz kısım, döngüde referans aldığımız dizi değişkenimiz. Foreach bizim için dizideki eleman sayısı kadar dönecek demiştik. Bu da onun için.

Dizi Elemanı da döngünün her bir dönüşünde sırası gelen elemanın değerini yüklediği değişken adı. Biz Dizi Elemanı için de bir değişken veriyoruz ve Foreach de her dönüşünde sıradaki elemanın değerini yüklüyor.

Şimdi olayı anlayabilmek için örnek verme zamanı geldi:


<html>
<body>

<?

$dizi=array ( "Mercedes", "BMW", "Jaguar", "Fiat", "Woswos", "Toyota" );

foreach ( $dizi as $eleman ){
echo $eleman."<br>";
}

?>

</body>
</html>


Örnek de böyle işte. Ya çıktısı, o da işte:


Mercedes
BMW
Jaguar
Fiat
Woswos
Toyota


Evet çıktımız da böyleymiş. Umarım anlatabilmişimdir. Anlamıyorsanız söyleyin arkadaşlar, anlayacağınız şekilde söyleyelim :)

Tamam tamam açıklıyorum :)
Foreach'e $dizi dizisini kullanmasını söyledik, bir de ona her bir dönüşünde sıradaki elemanı bize $eleman değişkenine yükle demeyi de unutmadı. Sonra da her bir dönüşte elemanı yazdırdık. İşte böyle.

Diyelim ki dönüşler sırasında bize elemanın anahtarı da gerekti. Ne yapacağız? Oturup bakacağız ekrana o da bize bakacak demeyin sakın. Onun için Foreach'in bir başka kullanımı var:


foreach ( Dizi as Eleman Anahtarı => Dizi Elemanı ) {

yapılacak iş

}


Dizi ve Dizi Elemanı dediğimiz kısmı biliyoruz.

Eleman Anahtarı da döngünün her bir dönüşünde sırası gelen elemanın anahtarının yüklendiği değişken adı. Biz Eleman Anahtarı için bir değişken veriyoruz ve Foreach de her dönüşünde elemanın anahtarını yüklüyor.

Daha iyi anlamak için örnek zamanı geldi değil mi?


<html>
<body>

<?

$dizi=array ("a"=>"Mercedes", "b"=>"BMW", "c"=>"Jaguar", "d"=>"Fiat", "e"=>"Woswos", "f"=>"Toyota" );

foreach ( $dizi as $anahtar=>$eleman ){
echo $anahtar."=".$eleman."<br>";
}

?>

</body>
</html>


Örneğimizin çıktısı da;


a=Mercedes
b=BMW
c=Jaguar
d=Fiat
e=Woswos
f=Toyota


Anladınız değil mi? Anladınız anladınız, sizi bilirim ben...

Foreach'i anladık, Dizileri anladık helal bize...

Şimdi ilk gördüğümde bana "Hı! Nasıl?" dedirten bir fonksiyonu tanıtayım :)

List

List fonksiyonu çok ilginç bir yapıya sahip. (Aslında list bir fonksiyon değil ama kafanızı karıştırmayım). Bir dizideki elemanları ayrı ayrı değişkenlere yüklemek için kullanıyoruz.


list( Değişken1, Değişken2, Değişken3, ... ) = Dizi;


Garip diimi?

DeğişkenN Dizi'nin N. elemanının atanacağı değişken.

Dizi Elemanları atanacak dizi.

Örnek vereyim de kafamız karışmasın.


<html>
<body>

<?

$kimlik=array("N. Can","KIRIK","Bilg. Müh.");

list($ad,$soyad,$unvan)=$kimlik;
echo $unvan." ".$ad." ".$soyad."<br>";

?>

</body>
</html>


Kısa öz bir örnek. Çıktısı:

Bilg. Müh. N. Can KIRIK

Evet işte böyle... List fonksiyonu bazen kurtarıcımız olabilir. Aklınızda bulunsun...

Dersi bitirmeden önce söz verdiğim Switch yapısını da anlatayım size. Dizi olayıyla pek alakalı olmasa da söz sözdür...

Switch

Switch aslında bir IF-ELSEIF-ELSE yapısıdır. Hemen mercek altına alalım...:


switch ( Değişken ) {

case Değer1:

Yapılacak işler
break;

...

case DeğerN:

Yapılacak işler
break;

default:

Yapılacak işler
break;

}


Tanıdık görünüyor ha?

Değişken, karşılaştırmada kontrol edeceğimiz değişkenimiz. Yani değerine bakacağımız değişken.

DeğerN de Değişkenin baktığımız olası değerleri.

case, Değişken'in kontrol ettiğimiz olası değerlerinden herbirini tanımlamak için kullandığımız yapı. Eğer Değişken'in değeri case ile verdiğimiz DeğerN'e uyuyorsa case'den sonra gelen kısım uygulamaya girer. İstediğimiz kadar case bloğu kullanabiliriz.

default da verdiğimiz değerler içerisinde Değişken'in değeri yoksa uygulamaya girecek kısmı tanımlıyoruz. Kullanılması şart değil.

break, bildiğimiz break işte. Ama burda hizmet ettiği amaç kutsal bir amaç :) Eğer bir case bloğunda break kullanmazsanız ve o case uygulamaya girerse bulunduğunuz yerden switch bloğunun sonuna kadar ya da başka bir iç-blokta break görene dek çalışır.

Örnek verelim de anlayalım değil mi?


<html>
<body>

<?

$i=1;

switch ( $ad ) {
case 1:
echo "i 1 imiş<br>";
break;
case 2:
echo "i 2 imiş<br>";
break;
case 3:
echo "i 3 imiş<br>";
break;
case 4:
echo "i 4 imiş<br>";
break;
default:
echo "i ne 1 ne 2 ne 3 ne de 4 imiş<br>";
break;
}

?>

</body>
</html>


Evet örneği gördük bir de çıktıya bakalım:

i 1 imiş

diye bir sonuç aldık. $i'nin değerini 3 yaparsak

i 3 imiş

sonucunu alırız. $i'nin değerini 7 yaparsak da

i ne 1 ne 2 ne 3 ne de 4 imiş

sonucunu alırız.

Az önce break kullanılmazsa demiştik, bir de aynı örneği break kullanmadan deneyelim...


<html>
<body>

<?

$i=1;

switch ( $ad ) {
case 1:
echo "i 1 imiş<br>";
case 2:
echo "i 2 imiş<br>";
case 3:
echo "i 3 imiş<br>";
case 4:
echo "i 4 imiş<br>";
default:
echo "i ne 1 ne 2 ne 3 ne de 4 imiş<br>";
}

?>

</body>
</html>


Sonuç ne olacak????


i 1 imiş
i 2 imiş
i 3 imiş
i 4 imiş
i ne 1 ne 2 ne 3 ne de 4 imiş


Gördünüz, i'nin değeri 1'e eşit oldu ve ilk case ile eşleşti. Ama bir orya break koymadığımız için diğer bloklar da işleme girdi. $i'nin değerini 3 yaparsak nolcak?


i 3 imiş
i 4 imiş
i ne 1 ne 2 ne 3 ne de 4 imiş

ALINTIDIR
 
Yukarı Alt