PHP Dizilerde İndeksleme
PHP dizilerinde indeksleme ve elemanlara erişimi öğrenin.
PHP'deki dizi (array) indeksleme mantığı, dilin en esnek ve güçlü özelliklerinden biridir. Diğer birçok dilde diziler sadece sayısal (0'dan başlayan) indekslerle çalışırken, PHP dizileri hem sayısal hem de ilişkisel (metinsel) indeksleri aynı anda kullanabilen "sıralı haritalar" (ordered maps) olarak işlev görür.
İşte PHP dizilerinin indeksleme mantığına dair detaylı bir açıklama:
---
## PHP Array (Dizi) İndeksleme Mantığı
Bir PHP dizisi, anahtar (key) ve değer (value) çiftlerinden oluşan bir koleksiyondur. Her değerin, onu benzersiz bir şekilde tanımlayan bir anahtarı vardır.
### 1. Temel Anahtar Türleri
PHP dizilerinde anahtarlar için sadece iki tür veri tipine izin verilir:
* **Integer (Tam Sayı):** `0`, `1`, `2`, `-5` gibi sayılar.
* **String (Metin):** `"ad"`, `"urun_kodu"`, `"email"` gibi metinler.
Diğer veri tipleri anahtar olarak kullanılmaya çalışıldığında, PHP bunları otomatik olarak integer veya string'e dönüştürmeye çalışır. Bu, önemli bir davranış farkıdır ve aşağıda detaylandırılacaktır.
### 2. İndeksleme Türleri
PHP dizileri, anahtar türüne göre iki ana indeksleme türüne ayrılır, ancak bunları bir arada kullanmak da mümkündür:
#### a) Numerik (Sayısal) İndeksleme
* **Tanım:** Anahtarların tam sayı olduğu dizilerdir. Geleneksel olarak 0'dan başlarlar ve ardışık olarak artarlar.
* **Oluşturma Yöntemleri:**
* **Otomatik İndeksleme:** Anahtar belirtilmediğinde PHP otomatik olarak sayısal bir anahtar atar.
```php
$meyveler = ['elma', 'armut', 'çilek'];
// $meyveler artık şu şekildedir:
// [0 => 'elma', 1 => 'armut', 2 => 'çilek']
```
Yeni eleman eklerken:
```php
$meyveler[] = 'muz'; // Otomatik olarak 3 indeksini alır
// $meyveler artık: [0 => 'elma', 1 => 'armut', 2 => 'çilek', 3 => 'muz']
```
* **Manuel İndeksleme:** İstenilen sayısal anahtarı açıkça belirtirsiniz.
```php
$sayilar = [
0 => 10,
1 => 20,
5 => 30 // Aradaki indeksleri atlayabilirsiniz
];
```
* **Otomatik İndeksleme Mantığı:**
* Eğer dizide hiç sayısal anahtar yoksa veya yalnızca negatif sayısal anahtarlar varsa, yeni eklenen eleman `0` indeksini alır.
* Eğer dizide pozitif sayısal anahtarlar varsa, yeni eklenen eleman mevcut en büyük pozitif sayısal anahtarın bir fazlası olan indeksi alır.
```php
$arr1 = [];
$arr1[] = 'a'; // $arr1 = [0 => 'a']
$arr1[] = 'b'; // $arr1 = [0 => 'a', 1 => 'b']
$arr2 = [-5 => 'x', 'y' => 'z']; // sadece negatif int ve string key var
$arr2[] = 'p'; // $arr2 = [-5 => 'x', 'y' => 'z', 0 => 'p']
$arr3 = [1 => 'foo', 5 => 'bar'];
$arr3[] = 'baz'; // $arr3 = [1 => 'foo', 5 => 'bar', 6 => 'baz']
```
#### b) İlişkisel (Associative) İndeksleme
* **Tanım:** Anahtarların metin (string) olduğu dizilerdir. Bu, anahtarlara anlamlı isimler vererek değerlere daha sezgisel bir şekilde erişmenizi sağlar.
* **Oluşturma Yöntemleri:**
```php
$kullanici = [
'ad' => 'Alice',
'soyad' => 'Smith',
'yas' => 30,
'email' => 'alice@example.com'
];
```
* **Eleman Ekleme/Güncelleme:**
```php
$kullanici['ulke'] = 'Türkiye'; // Yeni eleman ekleme
$kullanici['yas'] = 31; // Mevcut elemanı güncelleme
```
#### c) Karma (Mixed) İndeksleme
* **Tanım:** Bir PHP dizisi içinde hem sayısal hem de ilişkisel anahtarları bir arada kullanabilirsiniz.
* **Örnek:**
```php
$urun = [
'id' => 101,
'ad' => 'Laptop',
'fiyat' => 1200.50,
'etiketler' => ['elektronik', 'bilgisayar'], // İç içe dizi
0 => 'Stokta Var', // Sayısal anahtar
1 => 'Hızlı Teslimat' // Başka bir sayısal anahtar
];
```
Bu, PHP dizilerinin ne kadar esnek olduğunun bir göstergesidir.
### 3. Anahtar Tür Dönüşümü (Type Juggling)
PHP'nin otomatik tür dönüştürme özelliği, dizi anahtarları için de geçerlidir. Bir anahtar string veya integer dışında bir türde verilirse, PHP onu şu kurallara göre dönüştürmeye çalışır:
* **Boolean (true/false):** `true` -> `1`, `false` -> `0` olur.
```php
$arr = [];
$arr[true] = 'doğru'; // $arr[1] = 'doğru'
$arr[false] = 'yanlış'; // $arr[0] = 'yanlış'
```
* **Float (Ondalık Sayılar):** Ondalık kısmı atılarak (kesilerek) tam sayıya dönüştürülür.
```php
$arr = [];
$arr[1.5] = 'ondalıklı'; // $arr[1] = 'ondalıklı' (Eğer $arr[1] varsa üzerine yazar)
$arr[1.9] = 'ondalıklı2'; // $arr[1] = 'ondalıklı2'
```
* **NULL:** Boş bir string'e (`""`) dönüştürülür.
```php
$arr = [];
$arr[null] = 'boş'; // $arr[""] = 'boş'
```
* **Sayısal Stringler:** Tamamen sayısal içeriğe sahip stringler (örn: `"123"`, `"-5"`) ilgili tam sayıya dönüştürülür. Başında veya sonunda boşluklar varsa da dönüştürülür.
```php
$arr = [];
$arr["10"] = 'on'; // $arr[10] = 'on'
$arr[" 8 "] = 'sekiz'; // $arr[8] = 'sekiz'
$arr["-3"] = 'eksi üç'; // $arr[-3] = 'eksi üç'
```
**Önemli Not:** Eğer string "0" ile başlıyor ve ardından sayılar geliyorsa (örn: `"08"`, `"0xf"`), PHP bunları bir tam sayıya dönüştürmeye çalışır. `"08"` -> `8` olur. Ancak `"0foo"` gibi tamamen sayısal olmayan stringler değişmeden kalır.
* **Objects (Nesneler) ve Arrays (Diziler):** Anahtar olarak doğrudan kullanılamazlar. Eğer bir nesne anahtar olarak kullanılmaya çalışılırsa, PHP bir uyarı (E_NOTICE) verir ve anahtar `Array` string'ine dönüştürülür. Bir dizi anahtar olarak kullanılamaz, Fatal Error verir.
```php
$obj = new stdClass();
$arr[$obj] = 'nesne anahtar'; // Notice: Array to string conversion, $arr["Object"] = 'nesne anahtar'
// $arr[['a']] = 'dizi anahtar'; // Fatal error: Array to string conversion
```
### 4. Anahtar Erişimi ve Değişimi
Elemanlara erişmek veya değerlerini değiştirmek için köşeli parantez `[]` içine anahtarı yazarsınız:
```php
$kullanici = ['ad' => 'Alice', 'yas' => 30, 0 => 'aktif'];
echo $kullanici['ad']; // Çıktı: Alice
echo $kullanici['yas']; // Çıktı: 30
echo $kullanici[0]; // Çıktı: aktif
$kullanici['yas'] = 31; // Yaşı 31 olarak değiştirir
```
### 5. Anahtarların Üzerine Yazılması
Eğer bir diziye zaten var olan bir anahtarla yeni bir değer atarsanız, eski değer yeni değerle değiştirilir:
```php
$veri = ['a' => 10, 'b' => 20];
$veri['a'] = 100; // 'a' anahtarının değeri 10'dan 100'e değişir.
// $veri artık: ['a' => 100, 'b' => 20]
```
Anahtar tür dönüşümleri nedeniyle bu durum beklenmedik şekilde oluşabilir:
```php
$data = [
1 => 'İlk değer',
'1' => 'İkinci değer' // "1" stringi otomatik olarak 1 int'ine dönüşür ve 'İlk değer'in üzerine yazar.
];
echo $data[1]; // Çıktı: İkinci değer
```
### 6. Sıralama (Order)
PHP dizileri, "sıralı haritalar"dır. Bu, elemanların eklenme sırasının korunması anlamına gelir. PHP 7.0'dan itibaren, ilişkisel dizilerdeki elemanların eklenme sırası her zaman korunur. Sayısal anahtarlar ise genellikle küçükten büyüğe sıralı gibi görünse de, genel olarak tüm elemanların eklenme sırası korunur.
---
### Özetle
PHP'nin dizi indeksleme mantığı, anahtarlar için hem sayısal hem de metinsel değerlere izin vererek inanılmaz bir esneklik sunar. Ancak, PHP'nin otomatik tür dönüştürme (type juggling) davranışını anlamak, özellikle beklenmedik anahtar çakışmalarını önlemek için çok önemlidir. Bu esneklik, PHP'yi web geliştirme ve veri işleme görevleri için güçlü bir araç haline getirir.
Son Paylaşımlar
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025