Yazdır 17 Mart 2010 Çarşamba (Hit: 75313)

Çok Boyutlu Diziler

Dizi içindeki diziler olarak düşünülebilir. Yine bir örnekle açıklamak gerekirse bir otelin katları bir dizi olarak düşünülürse katlardaki odalar da bir dizi olarak düşünülebilir. Dolayısıyla burada dizi içindeki diziler söz konusudur. Başka bir örnek olarak şu verilebilir: Sınıftaki öğrenciler bir dizi, onları notları ise yine bir dizi olarak dününülürse yine karşımıza dizi içindeki diziler çıkmaktadır.

Çok boyutlu dizilerde her boyutun indisi için [ ] kullanılır. Aşağıdaki örneği inceleyebilirsiniz.

Otel
Kat1 Oda1 Ali
Oda2 Ahmet
Oda3 Ömer
Kat2 Oda1 Hasan
Oda2 Kenan
Oda3 Mert
Kat3 Oda1 Ayşe
Oda2 Fatma
Oda3 Hatice
<?php
$otel["kat1"]["oda1"]="Ali";
$otel["kat1"]["oda2"]="Ahmet";
$otel["kat1"]["oda2"]="Ömer";

$otel["kat2"]["oda1"]="Hasan";
$otel["kat2"]["oda2"]="Kenan";
$otel["kat2"]["oda3"]="Mert";

$otel["kat3"]["oda1"]="Ayşe";
$otel["kat3"]["oda2"]="Fatma";
$otel["kat3"]["oda3"]="Hatice";

echo $otel["kat2"]["oda3"]; // ekrana Mert yazar
?>

Görüldüğü gibi katlar dizinin birinci boyutu, odalar ise ikinci boyutudur. Aynı diziyi şimdi farklı bir şekilde tanımlayalım.

<?php
$otel=array(
 "kat1"=>array("oda1"=>"Ali","oda2"=>"Ahmet","oda3"=>"Ömer"),
 "kat2"=>array("oda1"=>"Hasan","oda2"=>"Kenan","oda3"=>"Mert"),
 "kat3"=>array("oda1"=>"Ayşe","oda2"=>"Fatma","oda3"=>"Hatice")
);

echo $otel["kat2"]["oda3"]; // ekrana Mert yazar
?>

Not: En son tanımlanan dizinin sonunda virgül (,) yoktur. Dikkat ediniz. Çünkü virgül dizi elemanlarını ayırır. En son elamandan sonra elaman olmadığından virgül konmaz.


Bir sınıftaki öğrencilerin matematik dersinden almış oldukları 3 notu öğrenci numaralarına göre saklayan bir dizi tanımlayalım.

Matematik
155 1 52
2 64
3 35
225 1 98
2 90
3 70
302 1 15
2 45
3 63
<?php
$matematik[155][1]=52;
$matematik[155][2]=64;
$matematik[155][3]=35;

$matematik[225][1]=98;
$matematik[225][2]=90;
$matematik[225][3]=70;

$matematik[302][1]=15;
$matematik[302][2]=45;
$matematik[302][3]=63;
?>

Burada birinci boyut öğrenci numaraları (155, 225 ve 302), ikinci boyut ise sınavlar (1, 2 ve 3) olarak düşünülmüştür. Bunlara atanan sayılar ise değerler yani öğrencilerin almış oldukları notlar (52, 64, 35, ...) olarak düşünülebilir. Aynı diziyi toplu bir şekilde tanımlamak istersek aşağıdaki gibi yapabiliriz.

<?php
$matematik=array(
 155=>array(1=>52,2=>64,3=>35),
 225=>array(1=>98,2=>90,3=>70),
 302=>array(1=>15,2=>45,3=>63)
);
?>

Örnek: Aşağıdaki tabloda 3 farklı sınıfın 4'er öğrencisinin gösterildiğini kabul ederek bunu bir dizi olarak tanımlayalım.

Okul
Birinci sınıf Ebru
Fuat
Gülüzar
Emre
İkinci sınıf Zeynep
Haşim
Merve
Nihat
Üçüncü sınıf Raşit
Gizem
Onur
Ayşe
<?php
$okul[0][]="Ebru";
$okul[0][]="Fuat";
$okul[0][]="Gülüzar";
$okul[0][]="Emre";

$okul[1][]="Zeynep";
$okul[1][]="Haşim";
$okul[1][]="Merve";
$okul[1][]="Nihat";

$okul[2][]="Raşit";
$okul[2][]="Gizem";
$okul[2][]="Onur";
$okul[2][]="Ayşe";

echo $okul[1][1]; // ekrana Haşim yazar
?>

Yukarıdaki tanımlamada dikkat ederseniz öğrenciler için indis belirtilmemiştir. Dolayısıyla öğrenciler dizinin sonuna eklenecektir. Böylece ikinci boyutun indisleri ise 0,1,2 ve 3 olacaktır. İkinci boyuttaki 0; birinci öğrenci olarak düşünülürse, 1,2 ve 3 ise sırasıyla diğer öğrenciler olarak düşünülebilir. Bu tamamen sizin tasarrufunuzda olan bir anlamlandırmadır. Aynı diziyi faklı bir şekilde tanımlayalım.

<?php
$okul[]=array("Ebru","Fuat","Gülüzar","Emre");
$okul[]=array("Zeynep","Haşim","Merve","Nihat");
$okul[]=array("Raşit","Gizem","Onur","Ayşe");

echo $okul[1][2]; // ekrana Merve yazar
?> 

Dikkat ederseniz burada hiçbir indis belirtilmemiştir. Dolayısıyla her dizi elemanı dizinin sonuna eklenecektir. Böylece her iki boyutun indisleri 0 dan başlayacaktır. Eğer indislerin 1 den başlmasını isterseniz şöyle bir tanımlama yapabilirsiniz.

<?php
$okul[1]=array(1=>"Ebru","Fuat","Gülüzar","Emre");
$okul[]=array(1=>"Zeynep","Haşim","Merve","Nihat");
$okul[]=array(1=>"Raşit","Gizem","Onur","Ayşe");

echo $okul[1][2]; // ekrana Merve yazar
?> 

Şimdi de aynı diziyi iki farklı şekilde daha tanımlayalım.
Aşağıdaki tanımlamada her iki boyutun indisleri 0 dan başlar.

<?php
$okul=array(
 array("Ebru","Fuat","Gülüzar","Emre"),
 array("Zeynep","Haşim","Merve","Nihat"),
 array("Raşit","Gizem","Onur","Ayşe")
);

echo $okul[1][2]; // ekrana Merve yazar
?> 

Aşağıdaki tanımlamada ise her iki boyutun indisleri 1 den başlar.

<?php
$okul=array(
 1=>array(1=>"Ebru","Fuat","Gülüzar","Emre"),
 array(1=>"Zeynep","Haşim","Merve","Nihat"),
 array(1=>"Raşit","Gizem","Onur","Ayşe")
);

echo $okul[1][2]; // ekrana Fuat yazar
?>

Dizilerdeki boyut sayısını daha da artırabilirsiniz. O zaman dizi içindeki dizilerin içindeki dizilerden bahsetmiş olursunuz ki bunlarında mantığı yukarıda anlatılan iki boyutlu diziler gibidir. İhtiyaç duyulduğunda bunlar da kullanılabilir. Örneğin 3 boyutlu bir dizi olarak, okuldaki sınıflarda bulunan öğrencilerin coğrafya dersinden aldıkları 2 farklı notu saklayan bir dizi düşünülebilir.

<?php
// birinci sınıf
$cografya[0][156][]=74; // birinci sınıfın 156 nolu öğrencisinin birinci coğrafya notudur.
$cografya[0][156][]=68; // birinci sınıfın 156 nolu öğrencisinin ikinci coğrafya notudur.
$cografya[0][174][]=18; // birinci sınıfın 174 nolu öğrencisinin birinci coğrafya notudur.
$cografya[0][174][]=23; // birinci sınıfın 174 nolu öğrencisinin ikinci coğrafya notudur.

// ikinci sınıf
$cografya[1][223][]=56; // ikinci sınıfın 223 nolu öğrencisinin birinci coğrafya notudur.
$cografya[1][223][]=61; // ikinci sınıfın 223 nolu öğrencisinin ikinci coğrafya notudur.
$cografya[1][254][]=41; // ikinci sınıfın 254 nolu öğrencisinin birinci coğrafya notudur.
$cografya[1][254][]=63; // ikinci sınıfın 254 nolu öğrencisinin ikinci coğrafya notudur.

// üçüncü sınıf
$cografya[2][415][]=33; // üçüncü sınıfın 415 nolu öğrencisinin birinci coğrafya notudur.
$cografya[2][415][]=51; // üçüncü sınıfın 415 nolu öğrencisinin ikinci coğrafya notudur.
$cografya[2][521][]=89; // üçüncü sınıfın 521 nolu öğrencisinin birinci coğrafya notudur.
$cografya[2][521][]=96; // üçüncü sınıfın 521 nolu öğrencisinin ikinci coğrafya notudur.

echo $cografya[1][254][1]; // ekrana 63 yazar. ikinci sınıfın 254 nolu öğrencisinin ikinci coğrafya notudur.
?>

Aynı diziyi toplu bir şekilde tanımlayalım.

<?php
$cografya=array(
   array( // birinci sınıf
         156=>array(74,68), // birinci öğrenci
         174=>array(18,23) // ikinci öğrenci
   ),
   array( // ikinci sınıf
         223=>array(56,61), // birinci öğrenci
         254=>array(41,63) // ikinci öğrenci
   ),
   array( //üçüncü sınıf
         415=>array(33,51), // birinci öğrenci
         521=>array(89,96) // ikinci öğrenci
  )
);

echo $cografya[1][254][1]; // ekrana 63 yazar. ikinci sınıfın 254 nolu öğrencisinin ikinci coğrafya notudur.
?>

 


Bu site meslek liselerinde bilişim bölümü web programcılığı dalında okutulan internet programcılığı dersine yardımcı olması için tasarlanmıştır. İletişim için iletisim@phpdefteri.com
Apache PHP MySQL PhpMyAdmin EasyPHP Xampp AppServ Wamp W3School

www.phpdefteri.com © 2010