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.
- Yeni PHP’de dizi tanımı için
[](short array syntax) tercih edilir:$dizi = ["a","b"]; - Dizi boyunca gezinirken
foreachen 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 amanulldeğerlerde false döner; gerçek anahtar kontrolü içinarray_key_exists()kullan.
Dizilerin Tanımlanması
Numaralı dizi ve anahtar-değer (associative) dizi örnekleri:
<?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ı:
<?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.
<?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:
<?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ı:
<?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:
<?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).
<?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:
<?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.).
<?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
}
?>
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.
<?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"]
?>