PHP > Dizi (Array) İşlemleri

Tek bir değişkende tek değer saklanır; benzer türde çok sayıda veriyi bir arada yönetmek için diziler kullanılır. PHP’de diziler hem numaralı (indexed) hem de anahtar-değer (associative) yapıda olabilir ve iç içe (çok boyutlu) kullanılabilir.

Püf Noktalar
  • Yeni PHP’de dizi tanımı için [] (short array syntax) tercih edilir: $dizi = ["a","b"];
  • Dizi boyunca gezinirken foreach en pratik ve hatasız yöntemdir.
  • count($dizi) çağrısını döngü içinde tekrar tekrar yapmak yerine dışarıda değişkene al.
  • Bir anahtar var mı kontrolü için isset() hızlıdır ama null değerlerde false döner; gerçek anahtar kontrolü için array_key_exists() kullan.

Dizilerin Tanımlanması

Numaralı dizi ve anahtar-değer (associative) dizi örnekleri:

Örnek: Tanımlama (indexed / associative)
<?php
// Numaralı (indexed) dizi
$iller = ["Ankara", "İstanbul", "İzmir", "Bursa", "Samsun"];
echo $iller[4]; // Samsun

// Anahtar-değer (associative) dizi
$plaka = [
  "06" => "Ankara",
  "34" => "İstanbul",
  "35" => "İzmir"
];
echo $plaka["34"]; // İstanbul

// Karışık tipte veriler (PHP bunu destekler)
$karisik = [
  25,
  "Yirmi beş",
  123456,
  "sehir" => $iller[0]
];
?>

Eleman Ekleme / Çıkarma

En çok kullanılan ekleme-çıkarma fonksiyonları:

Örnek: push/pop, unshift/shift, unset
<?php
$dizi = ["Ankara", "İstanbul"];

// Sona ekle
array_push($dizi, "İzmir");   // ["Ankara","İstanbul","İzmir"]
$dizi[] = "Bursa";            // en pratik ekleme

// Sondan çıkar
$son = array_pop($dizi);      // "Bursa"

// Başa ekle
array_unshift($dizi, "Samsun");

// Baştan çıkar
$ilk = array_shift($dizi);

// Anahtarlı dizide silme
$plaka = ["06" => "Ankara", "34" => "İstanbul"];
unset($plaka["34"]);          // "34" anahtarı silinir
?>

Dizi Boyunca Iterasyon (Gezinme)

Çoğu iş için foreach önerilir. Zorunlu durumlarda for da kullanılabilir.

Örnek: foreach / for (count optimizasyonu)
<?php
$iller = ["Ankara","İstanbul","İzmir"];

// En pratik yöntem
foreach ($iller as $sehir) {
  echo $sehir . "<br>";
}

// İndeks de lazım ise
foreach ($iller as $i => $sehir) {
  echo $i . " => " . $sehir . "<br>";
}

// for ile (count'u bir kez al)
$len = count($iller);
for ($i = 0; $i < $len; $i++) {
  echo $iller[$i] . "<br>";
}
?>

Arama ve Kontrol

Dizide değer var mı, anahtar var mı, filtreleme gibi sık ihtiyaçlar:

Örnek: in_array, array_search, array_key_exists, isset
<?php
$iller = ["Ankara","İstanbul","İzmir"];

// Değer var mı?
if (in_array("İzmir", $iller, true)) {
  echo "İzmir dizide var";
}

// Değerin index'i (bulamazsa false)
$idx = array_search("İstanbul", $iller, true); // 1

// Anahtar var mı?
$plaka = ["06" => "Ankara", "34" => null];

// isset: hızlı ama null ise false döner
var_dump(isset($plaka["34"]));          // false

// array_key_exists: anahtar gerçekten var mı?
var_dump(array_key_exists("34", $plaka)); // true
?>

Dizilerin Sıralanması

En sık kullanılan sıralama fonksiyonları:

Örnek: sort/asort/ksort + tersleri + özel sıralama (usort)
<?php
// Indexed dizi - değer bazlı
$nums = [3, 10, 2];
sort($nums);   // [2,3,10]
rsort($nums);  // [10,3,2]

// Associative dizi - değere göre (anahtar korunur)
$puan = ["Ali" => 70, "Ayşe" => 90, "Mehmet" => 80];
asort($puan);  // 70,80,90 (anahtarlar korunur)
arsort($puan); // 90,80,70

// Associative dizi - anahtara göre
ksort($puan);
krsort($puan);

// Özel sıralama (çok kullanılır) - usort (anahtarlar korunmaz)
$urunler = [
  ["ad" => "Kalem", "fiyat" => 12],
  ["ad" => "Defter", "fiyat" => 35],
  ["ad" => "Silgi", "fiyat" => 8]
];

usort($urunler, function($a, $b) {
  return $a["fiyat"] <=> $b["fiyat"]; // fiyata göre artan
});
?>

Birleştirme / Parçalama

Dizileri birleştirme, benzersizleştirme, parçalama gibi pratikler:

Örnek: array_merge, array_unique, array_diff, implode/explode
<?php
$a = ["Ankara","İstanbul"];
$b = ["İzmir","Bursa"];

// Birleştirme
$birlesik = array_merge($a, $b);

// Tekilleştirme
$c = ["Ankara","Ankara","İzmir"];
$tekil = array_values(array_unique($c)); // indexleri yeniden düzenle

// Fark (a'da olup b'de olmayanlar)
$fark = array_diff(["a","b","c"], ["b","d"]); // ["a","c"]

// Yazıya çevir
$csv = implode(", ", ["Ali","Ayşe","Mehmet"]); // "Ali, Ayşe, Mehmet"

// Yazıyı diziye çevir
$parca = explode(",", "1,2,3"); // ["1","2","3"]
?>

Dönüştürme ve Filtreleme: array_map, array_filter, array_reduce

Modern PHP’de çok kullanılan üçlü: dönüştür, filtrele, indirgeme (topla/birleştir).

Örnek: map/filter/reduce
<?php
$sayilar = [1,2,3,4,5];

// map: her elemanı dönüştür
$kare = array_map(fn($x) => $x * $x, $sayilar); // [1,4,9,16,25]

// filter: şarta uyanları al
$cift = array_values(array_filter($sayilar, fn($x) => $x % 2 === 0)); // [2,4]

// reduce: tek değere indir (toplam)
$toplam = array_reduce($sayilar, fn($acc, $x) => $acc + $x, 0); // 15
?>

Parça Alma / Parça Değiştirme: array_slice() / array_splice()

Dizinin bir bölümünü almak veya diziden bölüm çıkarıp yerine yeni öğeler eklemek için:

Örnek: slice vs splice
<?php
$dizi = ["a","b","c","d","e"];

// slice: kopya parça alır, orijinali bozmaz
$parca = array_slice($dizi, 1, 2); // ["b","c"]

// splice: orijinali değiştirir
array_splice($dizi, 2, 1, ["X","Y"]); // "c" yerine X,Y ekler
// $dizi: ["a","b","X","Y","d","e"]
?>

Çok Boyutlu Diziler

İç içe diziler gerçek projelerde sık kullanılır (ürün listesi, kullanıcılar, ayarlar vb.).

Örnek: çok boyutlu erişim + güvenli kontrol
<?php
$veri = [
  "iller" => ["ankara","istanbul"],
  "ilceler" => [
    "merkez",
    ["keçiören","batıkent"]
  ]
];

echo $veri["iller"][1];        // istanbul
echo $veri["ilceler"][1][1];   // batıkent

// Güvenli erişim (var mı?)
if (isset($veri["ilceler"][1][0])) {
  echo $veri["ilceler"][1][0]; // keçiören
}
?>
İpucu
Çok boyutlu diziler büyüdükçe okunabilirlik düşer. Veri yapısı karmaşıklaşıyorsa class / DTO veya veritabanı tablosu daha doğru olabilir.

Bonus: Liste içinden sütun çekme array_column()

Çok kullanılan bir pratik: ürün listesinden sadece fiyatları ya da isimleri almak.

Örnek: array_column()
<?php
$urunler = [
  ["id" => 1, "ad" => "Kalem",  "fiyat" => 12],
  ["id" => 2, "ad" => "Defter", "fiyat" => 35],
  ["id" => 3, "ad" => "Silgi",  "fiyat" => 8],
];

// Sadece "ad" alanları
$adlar = array_column($urunler, "ad"); // ["Kalem","Defter","Silgi"]

// id'yi anahtar yap
$adlarById = array_column($urunler, "ad", "id"); // [1=>"Kalem",2=>"Defter",3=>"Silgi"]
?>