Php Dizi (Array) Nasıl Kullanılır?

Php Dizi (Array) Nedir? Php Dizi Nasıl Kullanılır?

Php dilinde ve diğer dillerde dizi, birden fazla veriyi tek bir isim ile saklamamızı sağlayan yapılardır. Hemen hemen tüm programlama dillerinde dizi yapıları mevcuttur. Diziler kullanım ve mantık olarak birbirlerine benzemektedir hatta aynısıdır diyebiliriz.

Diziler aynı tür yada farklı tür veriyi birlikte saklayabilir. Dizilerin sakladığı veriler dinamik olarak sürekli değiştiğinden dolayı genellikle aynı tür verileri saklamak tercih edilir. Php Değişken Tanımlama ve Kuralları başlıklı yazımda php veri türlerini inceleyebilirsiniz.

Php dilinde ve diğer dillerde dizi içerisinde sakladığımız veriye yada verilere ulaşmak için indis değerlerini kullanırız. İndis değerleri aksi belirtilmediği sürece 0’dan başlar ve birer artarak (toplam eleman sayısı – 1)’e kadar gider. Bunun sebebi numaralandırmanın 0’dan başlamasıdır. Buna göre 4 adet veri gönderdiğimiz dizinin son elemanın indisi 3 olacaktır.

Php Dizi Tanımlama

Php dilinde dizi tanımlamanın bir kaç yolu vardır. Hangisini kullanacağımızı ihtiyaçlarımız doğrultusunda belirleriz. Genel kullanımı aşağıdaki örnekte inceleyelim.

<?php 
$dizi = array('elma','armut','muz','kivi');  // Kısa Dizi Tanımlama
          //     0      1       2     3   indis değerleri 
?>

Yukarıdaki örnekte de görüldüğü üzere bir php diziler tanımlanırken değişkenin tipini Array olarak belirtmemiz gerekiyor. Daha sonrasında her dizi elemanını virgül (,) ile ayırarak art arda ekleyebiliriz. Yukarıdaki örnek kısa dizi tanımlamasıdır. Uzun kullanımı için aşağıdaki örneği inceleyelim.

<?php 
// Uzun dizi tanımlama
$dizi = array();
$dizi[] = 'elma';  // 0. indis
$dizi[] = 'armut'; // 1. indis
$dizi[] = 'muz';   // 2. indis
$dizi[] = 'kivi';  // 3. indis
?>

Bir önceki örnekte dizi elemanlarını tek satırda virgül ile ayırarak art arda tanımladık. Burada ise önce dizi değişkenimizi tanımladık, diziyi tanımladıktan sonra ise dizi elemanlarını dizimize ekledik. Her iki örnekte aslında aynı mantıktadır. Fakat örneğin diziyi döngü dışında tanımlayıp dizi elemanlarını döngü içinde eklememiz gerekebilir. Bu durumda yukarıdaki uzun kullanım şekli işimize yarayacaktır.

Php Dizi Elemanlarının Çağırılması

Tanımladığımız dizinin elemanlarına yukarıda indis değerleri ile erişebileceğimizden bahsetmiştim. İndis değeri ile dizi elemanlarına nasıl erişildiğini aşağıdaki örnekte inceleyelim.

<?php 
$dizi = array('elma','armut','muz','kivi');
         //      0      1      2      3  indis değerleri
echo $dizi[2]; // Çıktı muz olacaktır. 
?>

Yukarıdaki örnekte indis değeri 2 olan dizi elemanını ekrana yazdırdık. Burada indislerin 0’dan başladığını unutmayalım ve sıfırdan sayarak ‘muz’ verisinin indisinin 2 olduğunu görebiliriz. Ekrana yazdırmak istediğimiz dizi elemanının indis değerini [ ] köşeli parantezlerin arasına yazmamız gerekmektedir. Aşağıdaki örnekte basit bir döngü ile dizi elemanlarına erişimi inceleyelim. Php Döngü Kullanımı konusunu incelemenizi tavsiye ederim.

<?php 
$dizi = array('elma','armut','muz','kivi');
for($i = 0; $i< count($dizi); $i++){
    echo $dizi[$i].'<br/>';
}
?>

Yukarıdaki örnekte dizi içerisindeki tüm elemanları alt alta yazdıran bir döngü oluşturduk. Dizinin tüm elemanlarını yazdırabilmek için toplam eleman sayısını bulmamız gerekiyor. count($dizi) deyimini kullanarak dizi içerisindeki toplam eleman sayısını buluyoruz ve dizimizin bitiş noktası olarak belirtiyoruz. count() fonksiyonunu dizi içerisindeki toplam eleman sayısını bulmak için kullandık.

Dikkat etmeniz gereken döngünün başlangıç değerinin 0 olmasıdır. Eğer döngü 1’den başlarsa döngü 3 kez dönecektir ve 1 dizi elemanı eksik yazdırılacaktır. Bunu test ederek deneyimleyebilirsiniz.

İlişkisel (Özelleştirilmiş) Diziler

Dizinin içerisindeki elemanlara aksini belirtmediğimiz sürece otomatik tanımlanan indis değerleri ile erişebildiğimizi yukarıda bir yerde yazmıştım . Bazı durumlarda dizimi özelleştirmemiz gerekebilir. İlişkisel dizi tanımlamasını aşağıdaki örnekte inceleyelim.

<?php 
// Normal kullanım
$kullanici = array('Mustafa AZAK','eposta@mustafaazak.com','Giresun');

//Özelleştirilmiş kullanım
$kullanici = array('adsoyad' => 'Mustafa AZAK', 'eposta' => 'eposta@mustafaazak.com', 'sehir' => 'Giresun);
?>

Yukarıdaki örnek tanımlamada indis değerleri özelleştirilmiş bir dizi tanımladık. Bir dizide indis değeri belirtmek için indis değerini yazdıktan sonra eşit büyük ( => ) işaretinden sonra o indisin alacağı değer yazılır. İndis değeri tam sayı(int) yada metin(string) olabilir.

<?php 
$kullanici = array();
//Normal Kullanım
$kullanici[] = 'Mustafa AZAK';
$kullanici[] = 'eposta@mustafaazak.com';
$kullanici[] = 'Giresun';

//Özelleştirilmiş Kullanım
$kullanici['adsoyad'] = 'Mustafa AZAK';
$kullanici['eposta']  = 'eposta@mustafaazak.com';
$kullanici['sehir']   = 'Giresun';
?>

İlişkisel (özelleştirilmiş) diziyi nerede kullanılacağı hakkında aklınızda herhangi bir şey olmayabilir. Yukarıdaki örnekten yola çıkarak kullanıcının sadece eposta bilgisine ulaşmanız gerekiyor fakat kaçıncı indiste olduğunu bilmiyorsunuz işte bu durumda ilişkisel dizi kullanmak mantıklı olacaktır.

İlişkisel dizi elemanlarına erişmek için indise verdiğimiz değeri kullanıyoruz. Normal dizide indis numarasını yazarak yaptığımız işlemin aynısını bu sefer indise verdiğimiz değer ile yapıyoruz. Aşağıdaki örnekte inceleyelim.

<?php 
$kullanici = array();
$kullanici['adsoyad'] = 'Mustafa AZAK';
$kullanici['eposta'] = 'eposta@mustafaazak.com';
$kullanici['sehir'] = 'Giresun';

/* VEYA  */

$kullanici = array('adsoyad' => 'Mustafa AZAK', 'eposta' => 'eposta@mustafaazak.com', 'sehir' => 'Giresun');

echo $kullanici['adsoyad'].'<br />';
echo $kullanici['eposta'].'<br />';
echo $kullanici['sehir'];
?>

Yukarıda aynı diziyi görmeniz için hem uzun hem kısa şekilde tanımladım. Sadece birini kullanmanız yeterli. Her iki tanımlama şeklinde de dizi elemanına erişmek için indise verdiğimiz değeri kullanmamız gerekiyor.

Php Çok Boyutlu Dizi Kullanımı

Şimdi dizilerin birde çok boyutlu tarafı var. Yukarıda bir kullanıcının epostasına erişmek için dizi özelleştirmenin mantıklı olacağını söylemiştim. Bu kullanıcı sayısının 1 değil 5 olduğunu düşünelim. Bu durumda her kullanıcı için farklı dizi tanımlamak çok saçma olacaktır. Bu adımda devreye çok boyutlu diziler girmektedir. Çok boyutlu dizilerde indis değeri belirtmenizi tavsiye ederim çünkü indis numaraları ile çalışmak bir yerden sonra oldukça zorlayacaktır. Aşağıdaki örnekte inceleyelim.

<?php 
$kullanici = array();
$kullanici[0] = array('ad' => 'Mustafa', 'eposta' => 'eposta@mustafaazak.com', 'sehir' => 'Giresun');
$kullanici[1] = array('ad' => 'Hasan', 'eposta' => 'hasan@eposta.com', 'sehir' => 'İstanbul');
$kullanici[2] = array('ad' => 'Mehmet', 'eposta' => 'mehmet@eposta.com', 'sehir' => 'İzmir');
?>

Yukarıdaki örnekte çok boyutlu bir kullanıcı dizisi tanımladık. İlk olarak kullanıcı isimli bir dizi tanımlıyoruz. Daha sonrasında kullanıcı dizisinin 0’ıncı indisine bir dizi daha tanımlıyoruz. Çok boyutlu başka bir deyişle iç içe dizi oluşturmuş oluyoruz. Yukarıdaki dizinin yapısını daha net görebilmek için <pre> etiketi arasına yazarak aşağıda inceleyelim.

<?php 
echo '<pre>';
print_r($kullanici);
echo '</pre>';
?>

Burada kullandığımız print_r() fonksiyonu dizideki elemanların ilişkilerini daha rahat gözlemleyeceğimiz bir fonksiyondur. pre etiketleri arasında dizimizi yazdırdığımızda aşağıdaki sonucu elde ederiz. Böylece dizi hiyerarşini daha net inceleyebiliriz.

Array
(
    [0] => Array
        (
            [ad] => Mustafa
            [eposta] => eposta@mustafaazak.com
            [sehir] => Giresun
        )

    [1] => Array
        (
            [ad] => Hasan
            [eposta] => hasan@eposta.com
            [sehir] => İstanbul
        )

    [2] => Array
        (
            [ad] => Mehmet
            [eposta] => mehmet@eposta.com
            [sehir] => İzmir
        )

)

Görüldüğü üzere çok boyutlu diziler aslında iç içe olan dizilerdir. Burayı incelediğimizde tüm dizileri kapsayan bir dizi var ve içerisinde 3 elemanı var. Her elemanın içerisinde de indis değerleri belirtilmiş 3 er eleman var. Çok boyutlu dizimizde verilere erişmek için indis değerleri sırasıyla dıştan içe doğru belirtmemiz gerekir. Aşağıdaki örnekte inceleyelim.

<?php 
$kullanici = array();
$kullanici[0] = array('ad' => 'Mustafa', 'eposta' => 'eposta@mustafaazak.com', 'sehir' => 'Giresun');
$kullanici[1] = array('ad' => 'Hasan', 'eposta' => 'hasan@eposta.com', 'sehir' => 'İstanbul');
$kullanici[2] = array('ad' => 'Mehmet', 'eposta' => 'mehmet@eposta.com', 'sehir' => 'İzmir');

echo $kullanici[1]['eposta'];
?>

Yukarıdaki örnekte echo $kullanici[1][‘eposta’] komutunu incelediğimizde önce dıştaki dizinin indis değerini daha sonra onun içindeki dizi elemanının indis değerini yazıyoruz. Yani indis değeri 1 olan dizinin içerisinde indis değeri eposta olan veriyi yazdırmış oluyoruz.

Çok boyutlu dizilerde ihtiyacımız olan verilere döngüler ile erişmek mümkündür. Tabi burada önemli olan kısım indis değerlerini özelleştirmek olacaktır. Veri sayısının artması kargaşaya neden olacaktır. Aşağıdaki örnekte for döngüsü ile ihtiyacımız olan veriye nasıl ulaşabileceğimizi inceleyelim.

<?php 
$kullanici = array();
$kullanici[0] = array('ad' => 'Mustafa', 'eposta' => 'eposta@mustafaazak.com', 'sehir' => 'Giresun');
$kullanici[1] = array('ad' => 'Hasan', 'eposta' => 'hasan@eposta.com', 'sehir' => 'İstanbul');
$kullanici[2] = array('ad' => 'Mehmet', 'eposta' => 'mehmet@eposta.com', 'sehir' => 'İzmir');

for($i = 0; $i < count($kullanici); $i++){
    echo  $kullanici[$i]['eposta']. '<br />';
}
?>

Yukarıdaki örnekte hem dizi tanımlama hem de döngü ile eposta indisinin sakladığı verileri ekrana yazdıran bir kod yazdık. Aynı örneği foreach döngüsü ile denemenizi tavsiye ederim. Php Döngü Kullanımı başlıklı yazımı inceleyerek döngü kullanımı hakkında fikir sahibi olabilirsiniz. Örnekleri deneyerek ve değiştirerek php programlamada dizi konusunu daha iyi kavrayabilirsiniz. Dilerseniz PHP:Array konusunu inceleyebilirsiniz.

Dizileri daha verimli kullanmamız için php tarafından sunulan hazır dizi fonksiyonları mevcuttur. Php Dizi Fonksiyonları başlığı altında inceleyebilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Exit mobile version