Anasayfa / PHP / PHP Diziler (Arrays) Nedir?

PHP Diziler (Arrays) Nedir?

Web geliştirme serüvenimizde PHP’nin veri tiplerini ve değişkenlerini daha önce incelemiştik. Şu ana kadar kullandığımız tüm standart değişkenler, içlerinde aynı anda sadece tek bir değer (örneğin sadece bir metin veya sadece bir sayı) tutabiliyordu. Ancak programlarınız geliştikçe ve daha karmaşık hale geldikçe, birbiriyle ilişkili birden fazla veriyi tek bir çatı altında gruplama ve yönetme ihtiyacı hissedeceksiniz.

İşte programlama dünyasında aynı anda birden fazla değeri tek bir değişken içinde tutmanıza ve bunları kolayca yönetmenize olanak tanıyan özel yapılara Diziler (Arrays) adı verilir. Gerçek hayattan bir örnek vermek gerekirse; standart bir değişkeni tek bir dosya kağıdı olarak düşünürseniz, dizileri (array) içine onlarca farklı dosya kağıdı koyabildiğiniz geniş bir klasör olarak düşünebilirsiniz.

Bu rehberimizde, PHP’de dizilerin ne olduğunu, nasıl oluşturulup düzenlendiğini ve bu veriler üzerinde nasıl işlemler yapabileceğinizi bol örneklerle adım adım öğreneceğiz.

PHP’de Dizi Oluşturma ve Dizi Türleri

PHP’de diziler yapılarına göre temel olarak iki farklı şekilde oluşturulur: Sayısal indeksli diziler (Numerically indexed arrays) ve İlişkisel diziler (String-indexed veya Associative arrays).

1. Sayısal İndeksli Diziler (Numerically Indexed Arrays)

Sayısal indeksli dizilerde, dizi içindeki her bir elemana erişmek için otomatik olarak atanan veya bizim belirlediğimiz sayılar (indeksler) kullanılır.

PHP’de böyle bir dizi oluşturmanın en yaygın yolu, array() yapısını kullanmaktır. Diziye eklenecek değerler virgüllerle ayrılarak parantez içine yazılır.

<?php
// Bir sayısal indeksli dizi tanımlayalım
$arabalar = array(
  'Ferrari',
  'Porsche',
  'Jaguar',
  'Lamborghini',
  'Mercedes'
);
?>

İkinci bir yöntem ise, array() komutunu kullanmadan doğrudan köşeli parantez indeks notasyonunu kullanarak diziyi eleman eleman oluşturmaktır.

<?php
// İndeks notasyonu ile dizi tanımlama
$arabalar = 'Ferrari';
$arabalar = 'Porsche';
$arabalar = 'Jaguar';
$arabalar = 'Lamborghini';
$arabalar = 'Mercedes';
?>

Yukarıdaki örneklerde fark ettiğiniz gibi, programlamada dizilerin indeks numarası her zaman 1’den değil, 0’dan başlar.

Pratik Bir İpucu: Eğer diziye yeni bir eleman eklerken indeks numarasını tam olarak bilmiyorsanız, köşeli parantezin içini boş bırakabilirsiniz. Bu durumda PHP, değer için otomatik olarak bir sonraki müsait indeks numarasını atayacaktır.

<?php
$arabalar[] = 'Ferrari'; // 0. indekse atanır
$arabalar[] = 'Lamborghini'; // 1. indekse atanır
?>

2. İlişkisel Diziler (Associative Arrays)

Eğer dizilerdeki elemanlara sadece rakamlarla değil de, sizin belirlediğiniz özel kelimelerle (anahtarlarla) ulaşmak istiyorsanız ilişkisel dizileri kullanırsınız. Bu dizilerde her eleman bir “Anahtar => Değer” (Key-Value) çifti olarak saklanır ve => bağlacı kullanılır.

<?php
// İlişkisel bir dizi tanımlayalım
$kullanici = array(
  'kullanici_adi' => 'ahmet',
  'sifre' => 'gizli123',
  'sunucu' => '192.168.0.1'
);
?>

Dizilere Veri Ekleme, Değiştirme ve Silme

Mevcut bir dizideki değeri değiştirmek, standart bir değişkendeki değeri değiştirmek kadar kolaydır: İlgili elemanın anahtarını veya indeksini belirterek ona yeni bir değer atamanız yeterlidir.

Örneğin, aşağıdaki $etler dizisinde yer alan “ham” (domuz eti) değerini “turkey” (hindi) olarak değiştirelim:

<?php
$etler = array('fish', 'chicken', 'ham', 'lamb');

// 2. indeksteki 'ham' değerini 'turkey' yapıyoruz
$etler = 'turkey';
?>

Diziden bir elemanı tamamen silmek isterseniz PHP’nin yerleşik unset() fonksiyonunu kullanmalısınız.

<?php
$etler = array('fish', 'chicken', 'ham', 'lamb');

// İlk eleman olan 'fish' değerini siliyoruz
unset($etler);
?>

Önemli Not: Bir elemanı unset() ile sildiğinizde, PHP o elemanı NULL yapar ve dizideki indeks numaralarını otomatik olarak yeniden sıralamaz (dizide bir boşluk/delik oluşur).

Çok Boyutlu Diziler (Nesting Arrays)

PHP, dizileri birbiri içine yerleştirerek sınırsız derinlikte içi içe diziler (çok boyutlu diziler) oluşturmanıza imkan tanır. Bu özellik, özellikle hiyerarşik ve yapısal verileri saklarken çok kullanışlıdır.

Örneğin, gelişmiş bir telefon rehberi yapmak için her bir kişiyi temsil eden ayrı dizileri, tek bir ana dizinin içinde toplayabiliriz:

<?php
$telefon_rehberi = array(
  array(
    'isim' => 'Raymond Rabbit',
    'tel' => '1234567',
    'email' => '[email protected]',
  ),
  array(
    'isim' => 'David Duck',
    'tel' => '8562904',
    'email' => '[email protected]',
  )
);
// David Duck'ın telefon numarasına erişmek için:
echo $telefon_rehberi['tel'];
?>

Diziler İçinde Gezinmek: foreach Döngüsü

Diziler içinde yer alan onlarca veriyi ekrana yazdırmak veya işlemek için en iyi yöntem döngüleri kullanmaktır. PHP, özel olarak diziler ve nesneler (objects) üzerinde çalışması için tasarlanmış foreach döngüsüne sahiptir.

foreach döngüsü, her adımda dizinin bir elemanını alır ve geçici bir değişkene atar.

Sayısal indeksli dizilerde kullanımı:

<?php
$sehirler = array('London', 'Paris', 'Madrid', 'Los Angeles');

foreach ($sehirler as $sehir) {
  echo "$sehir \r\n";
}
?>

İlişkisel dizilerde ise her adımda hem “anahtar” (key) hem de “değer” (value) alınabilir:

<?php
$sehirler = array(
  "Birleşik Krallık" => "London",
  "ABD" => "Washington",
  "Fransa" => "Paris"
);

foreach ($sehirler as $ulke => $sehir) {
  echo "$sehir, $ulke içindedir. \r\n";
}
?>

HTML Formları ile Dizilerin Kullanımı

Web geliştirirken dizilerin en büyük gücünü HTML formlarındaki çoklu seçim işlemlerinde görürsünüz. Çoklu seçim yapılabilen “checkbox” veya liste elemanlarının ad (name) kısımlarının sonuna [] (köşeli parantez) eklerseniz, form gönderildiğinde PHP bu girişleri otomatik olarak tek bir diziye dönüştürür.

Örneğin, kullanıcıdan favori pizza malzemelerini seçmesini istediğimiz bir formda:

<input type="checkbox" name="malzemeler[]" value="domates">Domates
<input type="checkbox" name="malzemeler[]" value="mantar">Mantar

Form gönderildiğinde, bu verileri PHP içerisinde $_POST['malzemeler'] diyerek doğrudan bir dizi olarak alıp işleyebiliriz.

En Çok Kullanılan PHP Dizi Fonksiyonları

PHP, dizileri manipüle etmek ve aramak için çok zengin yerleşik (built-in) fonksiyonlara sahiptir:

  • Boyutunu Bulma (count): Bir dizide kaç eleman olduğunu bulmanızı sağlar.
  • Eleman Ekleme/Çıkarma: array_push() dizinin sonuna eleman ekler, array_pop() sondaki elemanı çıkarır. array_unshift() dizinin başına eleman ekler, array_shift() ise başından eleman çıkarır. Not: Bu dört fonksiyon, sadece sayısal indeksli dizilerle kullanılmalıdır çünkü işlem yaparken indeksleri yeniden numaralandırırlar.
  • Tekrarları Silme (array_unique): Bir dizideki tekrarlayan (çift) değerleri ayıklayarak, yalnızca benzersiz verilerden oluşan yeni bir dizi döndürür.
  • Karıştırma ve Ters Çevirme: shuffle() dizinin elemanlarını rastgele bir şekilde karmaşıklaştırırken, array_reverse() dizideki sıralamayı baştan sona tersine çevirir.
  • Dizi İçinde Arama: in_array() fonksiyonu bir dizide belirli bir değerin olup olmadığını kontrol ederken, array_key_exists() fonksiyonu ilişkisel bir dizide belirli bir anahtarın bulunup bulunmadığını arar.
  • Sıralama (Sorting):
    • sort() diziyi küçükten büyüğe (alfabetik veya sayısal) sıralar.
    • asort() ilişkisel dizilerde değerlere göre küçükten büyüğe sıralama yapar ve “anahtar => değer” ilişkisini (bağını) bozmaz.
    • ksort() ise değerlere değil, tamamen dizinin anahtarlarına (keys) göre sıralama yapar.

Sonuç olarak PHP’deki diziler, programlarınızdaki karmaşık verileri düzene sokmanın en zarif yollarından biridir. Doğru fonksiyonları ve döngü yapılarını kullanarak veritabanından çektiğiniz binlerce kaydı, ya da kullanıcının girdiği onlarca form bilgisini hızlı bir şekilde listeleyebilir ve değiştirebilirsiniz.

Etiketlendi:

Cevap bırakın

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