PHP'de diziler (array)

Dizi, çok sayıda değişkenin bir araya gelerek oluşturduğu yapıya denir. Programlamadaki dizi kavramını matematikteki matris kavramına benzetebiliriz. Çünkü iki yapıda da veriler bir bütünlük içinde bulunur. Veriler bütünlük içinde bulunduğu için kullanım açısından oldukça işimize yarar. Diziler, genellikle aynı tipte veriler ile oluşturulur. Bu makalede bir boyutlu ve çok boyutlu dizi oluşturmayı ve bu dizilerin verilerine erişmeyi öğreneceğiz.

Bir Boyutlu Dizi Tanımlama (Oluşturma)

Php'de dizi tanımlamak için array() sözcüğü kullanılır.

<?php
// 1. yöntem
$gunler=array('Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar');

// 2. yöntem
$arabalar=array();
$arabalar[]="Toyota";
$arabalar[]="Mercedes";
$arabalar[]="Volkswagen";
$arabalar[]="Skoda";
?>

1 .yöntemde dizi tanımlamasını ve dizi elemanlarının diziye eklenmesi aynı satırda yapıldı. Bu yöntemde dizi elemanları oluşturulurken her bir eleman , ile birbirinden ayrılır.

2. yöntem de ise dizi tanımlandıktan sonra diziye elemanlar tek tek ekleniyor.

Bir Boyutlu Dizi Elemanlarına Erişim

Tanımlanmış olan bir dizinin elemanlarına erişmek için köşeli parantez([]) içerisinde erişilmek istenen dizi elemanının indis numarası yazılır.

Php' de indis numaraları 0 'dan başlar.

<?php
$gunler=array('Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar');
echo $gunler[0];       // ÇIKTI: Pazartesi
echo $gunler[3];       // ÇIKTI: Perşembe
echo $gunler[4];       // ÇIKTI: Cuma
?>

İlişkisel (Özelleştirilmiş) Dizi Tanımlama (Oluşturma)

Bir dizi tanımlarken özel indis değerleri belirtilmemişse PHP yorumlayıcısı indis değerlerini default olarak 0' dan başlatır ve bu şekilde indisler. Konu başlığında belirtilen ilişkisel veya özelleştirilmiş dizilerden kasıt indis değerlerini de eleman değerleri gibi belirleyebilmemizdir.

Özelleştirilmiş dizi tanımlarken 'indis değeri' => 'bu indise yüklenecek değer' şeklinde kullanılır.

<?php
// 1. yöntem
$ogrenci=array('ad'=>'Ahmet','soyad'=>'Ardahanlı','dogum'=>'1989','cinsiyet'=>'Erkek');

// 2. yöntem
$ogrenci=array();
$ogrenci['ad']='Ahmet';
$ogrenci['soyad']='Ardahanlı';
$ogrenci['dogum']='1989';
$ogrenci['cinsiyet']='Erkek';
// Burada köşeli parantezler içerisine indis değerlerini yazdığımıza dikkat edin !!!
?>

İlişkisel (Özelleştirilmiş) Dizi Elemanlarına Erişim

İndis değerleri özel olduğunda verilere erişmek için köşeli parantez içerisinde o verinin tutulduğu indisi belirtmemiz gerekir.

<?php
$ogrenci=array('ad'=>'Ahmet','soyad'=>'Ardahanlı','dogum'=>'1989','cinsiyet'=>'Erkek');
echo $ogrenci['ad'];             // ÇIKTI: Ahmet
echo $ogrenci['cinsiyet'];       // ÇIKTI: Erkek
?>

Çok Boyutlu Dizi Tanımlama (Oluşturma) ve Erişim

Çok boyutlu diziler(multidimensional arrays) birden fazla diziden oluşan dizilerdir. Bunu matematikteki birden fazla satır ve sütunlardan oluşan matrislere benzetebiliriz.

Çok boyutlu dizilerde indis değerlerini ilişkili belirtmek veya belirtmemek tamamen bize bağlıdır. İki yönteminde kullanım imkanı mevcuttur. Fakat, erişim kolaylığı sağladığı için indis değerlerini ilişkisel olarak tanımlamakta fayda vardır.

<?php
// 1. yöntem (ilişkisel indislerle)
$ogrenci=array();
$ogrenci[0]=array('adsoyad'=>'Ahmet Ardahanlı','sehir'=>'Erzurum','cinsiyet'=>'Bay');
$ogrenci[1]=array('adsoyad'=>'Mahmut Aydın','sehir'=>'Kars','cinsiyet'=>'Bay');
$ogrenci[2]=array('adsoyad'=>'Münire Ardahanlı','sehir'=>'Bursa','cinsiyet'=>'Bayan');

// 2. yöntem (ilişkisel indislerle)
$kitap=array();
$kitap[0]['kitapadi']="Ayaşlı ile Kiracıları";
$kitap[0]['yazar']="Memduh Şevket Esendal";
$kitap[1]['kitapadi']="Fatih-Harbiye";
$kitap[1]['yazar']="Peyami Safa";
$kitap[2]['kitapadi']="Yaban";
$kitap[2]['yazar']="Yakup Kadri Karaosmanoğlu";

// 3. yöntem (ilişkisel olmayan indislerle)
$cars=array
     (
     array('Toyota',Avensis,1.6),
     array('Honda',Civic,1,8),
     array('Volkswagen',Passat,1,6)
     );
?>

Yukarıda tanımlanan dizilere erişim yöntemleri aşağıda ayrı ayrı gösterilmiştir.

<?php
// 1. yöntem (ilişkisel indislerle)
echo $ogrenci[1]['adsoyad'];                 // ÇIKTI: Mahmut Aydın
echo $ogrenci[2]['sehir'];                   // ÇIKTI: Bursa

// 2. yöntem (ilişkisel indislerle)
echo $kitap[1]['kitapadi'];               // ÇIKTI: Fatih-Harbiye
echo $kitap[2]['yazar'];                  // ÇIKTI: Yakup Kadri Karaosmanoğlu

// 3. yöntem (ilişkisel olmayan indislerle)
echo $cars[0][0];     // ÇIKTI: Toyota
echo $cars[0][1];     // ÇIKTI: Avensis
echo $cars[1][2];     // ÇIKTI: 1.8
echo $cars[2][1];     // ÇIKTI: Passat
?>

Dizi Elemanlarını Silme

Bir diziyi veya dizinin herhangi bir elemanını tamamen silmek için unset() metodu kullanılır. Aslında bu metod tüm değişkenleri silmek için kullanılır. unset() metodunun söz dizimi aşağıdaki gibidir.

unset() metodu syntax

unset(değişken1,değişken2, ...);

unset() metodunun parametreleri

  • değişken1 : Gerekli bir parametredir. Silinecek olan veridir. Dizi, dizinin bir elemanı ve dizi dışında herhangi bir değişken olabilir.

  • değişken2 : Opsiyonel bir parametredir. Silinecek olan başka bir veridir. Dizi, dizinin bir elemanı ve dizi dışında herhangi bir değişken olabilir.

<?php
$isimler=array('Ahmet','Hanife','Ayşegül','İlknur');
print_r($isimler);    //ÇIKTI: Array ([0]=>Ahmet [1]=>Hanife [2]=>Ayşegül [3]=>İlknur)
unset( $isimler[0], $isimler[2]);       // 0 ve 2 indisli verileri(Ahmet, Ayşegül) sil
print_r($isimler);    //ÇIKTI: Array ([1]=>Hanife [3]=>İlknur) 
unset( $isimler);       // isimler dizisini tamamen sildik.
print_r($isimler);    // Ekrana yazdırmak istediğimizde "tanımsız değişken" hatası verir. 
?>

Döngü İle Dizi Elemanlarına Erişim

Bazı durumlarda dizi elemanlarına tek tek erişmek yerine sıralı bir şekilde bütün dizi elemanlarına erişmek isteyebiliriz. Bu ise döngülerle özellikle de foreach döngüsüyle yapılır.

İlişkisiz dizilerde;

Aşağıdaki örneği dikkatle inceleyelim.

<?php
$arabalar=array('Toyota','Mercedes','Honda');
foreach($arabalar as $veri){
	echo $veri.' ';    // ÇIKTI: Toyota Mercedes Honda
}
?>

Yukarıdaki örnekte foreach döngüsünde ilk önce çevrilecek olan dizi olan diziyi($arabalar) yazdık. as deyiminden sonrada her çevrimde değerin yükleneceği değişkeni($veri) yazdık. Böylece işlem 0 numaralı indisten başlar ve ilk değer olan Toyota değeri $veri isimli değişkene yüklenir. Ara işlemler bitip döngü başlangıcına gelince bu kez indis değeri otomatik 1 artırılır ve 1 numaralı indisin değeri olan Mercedes $veri değişkenine yüklenir. Bu işlem dizinin eleman sayısı kadar devam eder. Sonuçta aralarında birer boşluk bırakılarak veriler ekrana yazdırılmış olur.

İlişkili dizilerde;

Aşağıdaki örneği dikkatle inceleyelim.

<?php
$arabalar=array('marka'=>'Toyota','seri'=>'Avensis','yil'=>'2014');
foreach($arabalar as $indis => $deger){
	echo 'İndis : ' . $indis .', ';
	echo 'Değer : ' . $deger .'< br>';
}
//  ÇIKTI: 
//	İndis : marka, Değer : Toyota
//	İndis : seri, Değer : Avensis
//	İndis : yil, Değer : 2014
?>

Bu kullanımda döngünün her çevriminde hem indise hem de değere erişmiş olduk. indis değerini $indis değişkenine, eleman değerini ise $deger değişkenine yüklemiş oluyoruz.

Dizilerde Eleman Ekleme ve Çıkarma

Dizilerin başına ve sonuna eleman ekleme veya eleman çıkarma işlemleri yapılabilir. Bu işlemler için PHP'de 4 metot kullanılmaktadır. Bunlar;

  • array_unshift(): Dizinin başına 1 veya daha fazla eleman eklemeye yarar.

  • array_shift(): Dizinin başındaki elemanı diziden çıkarmaya yarar.

  • array_push(): Dizinin sonuna 1 veya daha fazla eleman eklemeye yarar.

  • array_pop(): Dizinin sonundaki elemanı diziden çıkarmaya yarar.

Syntax

array_unshift(array,değişken1,değişken2, ...);
array_shift(array);
array_push(array,değişken1,değişken2, ...);
array_pop(array);

Parametreler

  • array : Gerekli bir parametredir. Üzerinde işlem yapılacak olan diziyi belirlediğimiz parametredir.

  • değişken1 : Gerekli bir parametredir. Diziye eklenecek olan değeri yazdığımız parametredir.

  • değişken2 : Opsiyonel bir parametredir. Diziye eklenecek olan 2. bir değer varsa belirttiğimiz parametredir. Ekleme yapmaya devam ettikçe bu değerleri bu şekilde yanyana sıralayabiliriz.

Örnek

<?php
$ogrenciler=array('Muhammet');
// ogrenciler dizisini oluşturduk. 
array_unshift($ogrenciler,'Ali','Ahmet');
// ogrenciler dizisinin başına sırasıyla Ali ve Ahmet değerlerini ekledik.
// Yeni dizi Ali, Ahmet, Muhammet oldu
array_shift($ogrenciler);
// ogrenciler dizisinin başındaki ilk elemanı(Ali) diziden çıkardık.
// Yeni dizi Ahmet, Muhammet oldu
array_push($ogrenciler,'Kadir','Metin');
// ogrenciler dizisinin sonuna sırasıyla Kadir ve Metin değerlerini ekledik.
// Yeni dizi Ahmet, Muhammet, Kadir, Metin oldu
array_pop($ogrenciler);
// ogrenciler dizisinin sonundaki ilk elemanı(Metin) diziden çıkardık.
// Yeni dizi Ahmet, Muhammet, Kadir oldu
?>

Dizilerde İleri, Geri, Başa, Sona Git İşlemleri

Diziler genelde ilk elemandan başlanır ve son elemana doğru bir döngü yardımıyla taranır. Ama bazı uygulamalarda ileri git, geri git, başa git, sona git gibi işlemler gerekebilir. Dizi işaretçileri olarak da isimlendirilebilen bu fonksiyonlar aşağıda listelenmiştir.

  • current(): Dizi işaretçisinin üzerinde bulunduğu mevcut elemanı döndürür.

  • next(): Dizi işaretçisini bir ileri götürmeye yarar ve bir sonraki elemanı döndürür.

  • prev(): Dizi işaretçisini bir geri götürmeye yarar ve bir önceki elemanı döndürür.

  • end(): Dizi işaretçisini en sona götürmeye yarar ve dizinin en son elemanını döndürür.

  • reset(): Dizi işaretçisini en başa götürmeye yarar ve dizinin ilk elemanını döndürür.

  • list(): Değişken listesine tek işlemde değer atamak için kullanılır. each() metoduyla uyum içinde çalışan bir metottur.

  • each(): Dizi işaretçisinin üzerinde bulunduğu elemanı döndürür ve işaretçiyi bir adım ilerletir. Başka bir deyişle, current elementin anahtar ve değerini döndürür ve işaretçiyi bir sonraki(next) elemanın üzerine konumlandırır.

Syntax

current(array);
next(array);
prev(array);
end(array);
reset(array);
list(değişken1,değişken2, ...);
each(array);

Parametreler

  • array : Gerekli bir parametredir. Üzerinde işlem yapılacak olan diziyi belirlediğimiz parametredir.

  • değişken1 : Gerekli bir parametredir. list() metoduyla kullanılır ve üzerine değer ataması yapacağımız değişkeni yazdığımız parametredir.

  • değişken2 : Opsiyonel bir parametredir. Daha fazla değer ataması yapmak için kullanılan parametredir.

Örnek

<?php
$yazilim=array('PHP','CSS','HTML','JQUERY','C#','C++','JAVA');
// yazilim dizisini oluşturduk. 
echo current($yazilim);// ÇIKTI: PHP
echo next($yazilim);   // ÇIKTI: CSS
echo prev($yazilim);   // ÇIKTI: PHP
echo end($yazilim);    // ÇIKTI: JAVA
echo reset($yazilim);  // ÇIKTI: PHP
$araba=array('Toyota'=>'Japonya','Volkswagen'=>'Almanya','Hyundai'=>'Güney Kore');
while( list($anahtar,$deger) = each($araba)){
   echo $anahtar.' - '. $deger;
}
// ÇIKTI: 
   Toyota - Japonya
   Volkswagen - Almanya
   Hyundai - Güney Kore
?>
ETİKETLER
phpdizilerarraycurrentprevnextphp de dizilerphp arrays
Öncekİ Yazı

javascript setInterval() ve setTimeout() metodları

Sonrakİ Yazı

Mozilla da tablo hücresinde oluşan mavi kenarlık sorunu

İlgili Yazılar