Kategoriler
PHP

PHP’de Diziler (Array)

PHP programlama dilinde dizi genellikle birden fazla veriyi tutmak için kullanılan sıralı bir yapıdır. İçerisindeki verileri bir anahtar (INDEX) ile ilişkilendirerek tutar. Bu yüzden dizilerin kullanım alanı oldukça geniştir. Diziler değerleri bir anahtar ile ilişkili şekilde tutmasından dolayı; listeler, sözlük, küme ve kuyruklar oluşturmak için kullanılabilir.

Sözdizimi

Dize içerisindeki her bir anahtar ve değer ikilisinin oluşturduğu veriye elaman denir. Dizi içerisindeki her elaman virgül (,) ile ayrılır. Dizideki son elemandan sonra ise virgül kullanılmaz.

PHP’de bir diziyi 2 farklı şekilde oluşturabilirsiniz. Bunlardan en çok ve en yayın olarak kullanılanı array() fonksiyonu ile tanımlama yapmaktır.

Dizilerde bir anahtara bir değer ataması için => operatörü kullanılır.

$dizi = array(
    "birinci" => "Her hangi bir veri",
    "ikinci" => "Başka herhangi bir veri",
    "ucuncu" => 85
);

Yukarıda gördüğünüz yapıda birinci, ikinci, ucuncu kelimeleri anahtar => işaretinden sonra gelen veriler ise değerleridir.

Dizi içerisindeki elamanlara bir anahtar belirtseniz de belirtmeseniz de PHP tarafından bir INDEX numarası atanmaktadır ve veriye bu INDEX numarası ile de erişmeniz mümkündür. Programlamaya yeni başlayanlar için en büyük karmaşa INDEX numaralarının 1’den değil, 0’dan başlamasından kaynaklanır.

Bir dizi içerisindeki elemanların değerine ulaşmak istendiğinde dizinin değişken adı, köşeli parantezler içerisinde ise INDEX ya da anahtarı belirtilmelidir.

echo $dizi["birinci"];
echo $dizi[0];

Yukarıdaki her iki satır da dizinin aynı ve ilk elamanının değerini ekrana yazdırır. İlk satırda dizi içerisinde bizim belirlediğimiz anahtar ile kullanımını, ikinci satırda ise INDEX numarası ile kullanımını görüyorsunuz.

Dizileri tanımlamak için array() fonksiyonu yerine köşeli parantez ([]) kullanılabilir. Yukarıdaki dizinin aynısının köşeli parantezlerle oluşturulmuş hali;

$dizi = [
    "birinci" => "Her hangi bir veri",
    "ikinci" => "Başka herhangi bir veri",
    "ucuncu" => 85,
];

Burada fark ettiyseniz dizinin son elemanından sonra da bir virgül koydum. PHP’de bir dizi tanımlarken array() fonksiyonu ile köşeli parantez kullanmak arasındaki fark budur. Bu elbette tercih meselesidir. Köşeli parantez kullanmış olsanız da son elemana virgül koymak zorunda değilsiniz. Ancak bu diziye yeni bir elaman eklerken kolaylık sağlıyor. Son elemandan sonra virgül koymak dışında işleyiş olarak hangi bir farklılık yoktur.

Bir dizide anahtar bir dize (string) ya da bir tam sayı (int) türünde olmalıdır. Diğer veri türlerinde bir anahtar girilmek istenirse; çarpıtılır ya da bir hata meydana gelmesine neden olur.

Anahtar çarpıtmaları;

  • Geçerli bir onluk tamsayı string türünde belirtilse bile + sembolü ile başlamadığı sürece bir tamsayıya dönüştürülür. Örneğin "9" şeklinde bir anahtar tanımlamaya çalışırsanız bu 9 olarak çarpıtılır ancak "09" geçerli bir tamsayı olmadığından çarpıtma yapılmaz.
  • Float türler ondalık kısımları kırpılarak tam sayı türüne çarpıtılır. Örneğin 9.7 anahtarı aslında 9 olarak tutulur.
  • Boolean türler tamsayı türüne çarpıtılır. Yani true için 1, false için 0 yapılır.
  • null anahtarı "" şeklinde boş bir string’e çarpıtılır.
  • Dizi (array) ve nesne (object) türler anahtar olarak kullanılamaz. Illegal offset type uyarısına neden olur.

Dizi içerisinde anahtarı elle tamsayı türünden bir değer olarak verirseniz; o elemanın INDEX numarası da o olur ve kendisinden sonra gelen elamanların INDEX numarası da onunla başlar.

$dizi = [
    "birinci" => "Her hangi bir veri",
    5 => "Başka herhangi bir veri",
    "ucuncu" => "tamamen farklı bir veri"
];

Yukarıdaki örnekte ucuncu isimli anahtara sahip elamanın normal şartlarda INDEX’i 2 olacakken kendisinden önceki elamanın anahtarı 5 olarak belirlendiğinden; 6 olmuş oldu.

echo $dizi[6];
echo $dizi['ucuncu'];

Her iki satırda dizinin aynı elemanına erişim sağlar.

Bununla birlikte bazı elemanlara anahtar verip, bazılarına vermemeyi de seçebilirsiniz.

$dizi = [
    "Muhammet",
    "ŞAFAK",
    "age" => 27
];

Diziler anahtarlar konusunda seçici olsa da değerler konusunda oldukça esnektir. Bir dizi elamanı değer olarak PHP’nin desteklediği tüm veri türlerini tutabilir.

Diziye sonradan elaman eklemek;

Bir dizi oluşturulduktan sonra içerisine yeni elamanlar eklemek mümkündür.

$dizi = [
    "adi" => "Muhammet",
    "soyadi" => "ŞAFAK"

];

//Anahtar belirterek:
$dizi["age"] = 27;

//Anahtar belirmeden:
$dizi[] = "İstanbul";

Ayrıca diziyi öncesinde boş yani elemansız şekilde tanımlamak ve daha sonrasında içerisine elemanlar eklemek de mümkündür ki genellikle projelerde diziler bu şekliyle kullanılır.

Dizi içerisindeki bir elemanının değerini değiştirme;

Dizi içerisindeki her hangi bir elamanın değerini değiştirmekte mümkündür. Bunun için değiştirilecek elamanın varsa anahtarını ya da INDEX’ini kullanmanız gerekir.

$dizi = ["adi" => "Muhammet", "soyadi" => "ŞAFAK"];

//INDEX ile güncelleme
$dizi[0] = "Selim";

//Anahtar ile güncelleme
$dizi["soyadi"] = "Yılmaz";

Yukarıdaki örnekten sonra dizinin son hali aşağıdaki gibi olur;

$dizi = ["adi" => "Selim", "soyadi" => "Yılmaz"];

Çoklu (Multi) Dizi

PHP’nin dizi elemanlarının değer bölümde desteklenen tüm veri türlerine izin verdiğini belirtmiştim. Bir dizi elemanı değer olarak bir dizi alırsa; buna çoklu dizi ya da multi arrays veya iç içe dizi denir.

$authors = [
    "teknoloji" => [
        "Selim Ünan",
        "Hakan Tiryaki",
    ],
    "siyaset" => [
        "Hakkı Ünverdi",
        "Berna Şahoğlu",
    ]
];

Yukarıda gördüğünüz gibi $authors isimli bir dizi var ve içerisinde teknoloji, siyaset anahtarıyla iki eleman var ve bunlarda birer dizi şeklinde.

echo $authors["teknoloji"][0]; #Output : Selim Ünan
echo $authors["siyaset"][1]; #Output : Berna Şahoğlu

PHP’de diziler kullanılarak çok daha karmaşık ve kompleks yapılar kurmak da mümkündür.

Dizi Birleştirme

Oluşturulan iki diziyi birleştirerek tek dizi haline getirmek mümkündür.

+ Operatörü ile Birleştirme

İki diziyi + operatörünü kullanarak birleştirmek mümkündür ancak bu işlem sırasında dikkat edilmesi gereken bir husus vardır. + operatörü birleştirme işlemi yaparken, birleştirilecek dizilerin anahtar/INDEX değerlerini esas alarak birleştirme yapar. Yani her iki dizide de INDEX’i ya da anahtarı aynı olan elemanlar varsa bu elemanlardan birisi işleme dahil edilmez.

$teknoloji = ["t1" => "Kübra Korutürk", "t2" => "Sezen Şama", "t3" => "Ayşe Eraslan", "t4" => "Burak Demirel"];
$siyaset = ["s1" => "Demir Mansız", "s2" => "Aykut Bilir", "s3" => "Nevzat Çelik"];

$yazarlar = $teknoloji + $siyaset;

print_r($yazarlar);

Yukarıdaki kod şunu çıktılar;

Array
(
    [t1] => Kübra Korutürk
    [t2] => Sezen Şama
    [t3] => Ayşe Eraslan
    [t4] => Burak Demirel
    [s1] => Demir Mansız
    [s2] => Aykut Bilir
    [s3] => Nevzat Çelik
)

+ Operatörü ile birleştirme işlemi yapılırken birleştirilecek dizilerin aynı anahtara sahip elemanlarının olmadığından emin olunmalıdır. Aksi halde aynı anahtara sahip elamanların sadece bir tanesi (ilk dizideki) alınır ve diğerleri yok sayılır.

Yazar Muhammet ŞAFAK

1992 İstanbul doğumluyum. 2008 yılından beri profesyonel olarak PHP geliştiriyorum. Her ne kadar ağırlıklı olarak PHP üzerinde çalışsam da C, C++, Python, Java programlama dillerini de kullanıyorum.

Bir Cevap Yazın