İlişkisel bir dizi her değeri sizin seçtiğiniz bir anahtar altında saklar ve key => value olarak yazılır: $user = ['name' => 'Ada', 'age' => 36];. Bir değeri $user['name'] ile okuyun, anahtarına atama yaparak ekleyin ya da değiştirin: $user['email'] = 'ada@example.com';.
Diğer dillerde aynı yapıya sözlük (dictionary), map veya hash denir. PHP'de anahtarları 0, 1, 2 yerine dizge olan sıradan bir dizidir.
Çift ekleme, değiştirme ve silme
Var olmayan bir anahtara atama yapmak onu sona ekler. Var olan bir anahtara atama yapmak değerini değiştirir ve konumunu korur. unset() bir çifti siler.
array_push() burada işe yaramaz: yalnızca sayısal anahtarlı değerler ekleyebilir. Aynı anda birkaç çift eklemek için yeni değerlerin kazandığı array_merge($stock, $more) ya da var olan anahtarların değerlerini koruduğu $stock + $more kullanın; array_merge sayfası ikisini karşılaştırır.
Anahtarlar ve değerler üzerinde dolaşma
foreach ($array as $key => $value) çiftleri eklendikleri sırayla dolaşır. Yalnızca değerlere ihtiyacınız olduğunda $key => kısmını çıkarın.
Tüm anahtarları veya tüm değerleri alma
array_keys() anahtarları düz bir liste olarak, array_values() ise değerleri döndürür; ikisi de 0'dan yeniden indekslenir. array_keys() fonksiyonuna ikinci bir argüman verirseniz yalnızca o değeri tutan anahtarları döndürür, bir değere ait tüm anahtarları bu şekilde bulursunuz.
Tek bir anahtar için array_search() ilk eşleşmeyi, eşleşme yoksa false döndürür. array_search sayfası bu sonucu neden !== false ile karşılaştırmanız gerektiğini açıklar.
Bir anahtarın var olup olmadığını kontrol etme
isset($arr['key']) olağan ve en hızlı kontroldür, ama anahtar var olup null tuttuğunda false döndürür. array_key_exists('key', $arr) bu durumda true döndürür. Varsayılan bir değerle okumak için ?? operatörü ikisini birden yapar.
Anahtara veya değere göre sıralama
ksort() anahtara, asort() değere göre sıralar; ikisi de her anahtarı değerine bağlı tutar. krsort() ve arsort() ters sırada sıralar. İlişkisel bir dizide sort() kullanmayın: anahtarları atar ve 0'dan yeniden numaralar.
Bunların hepsi yerinde sıralar ve true döndürür, bu yüzden $sorted = ksort($arr) size bir dizi değil true verir. Özel sıralamalar için uasort() ve uksort() kullanılır.
Ters çevirme, sayma ve JSON'a dönüştürme
Anahtar değer verileriyle birkaç tek satırlık işlem sık sık karşınıza çıkar: array_flip() anahtarlarla değerleri yer değiştirir, array_count_values() her değerin kaç kez geçtiğini sayar ve json_encode() diziyi bir JSON nesnesine çevirir.
Sık yapılan hata: olmayan bir anahtarı okumak
Eksik bir anahtarı okumak null döndürür, ama sizin PHP'niz bir uyarı da yazdırır:
<?php
$user = ['name' => 'Ada'];
echo $user['phone'];
Warning: Undefined array key "phone" in /var/www/html/index.php on line 3
Okumaya hiçbir zaman uyarı vermeyen ?? ile bir varsayılan verin ya da eksik durum için ayrı bir dal gerekiyorsa önce isset() ile kontrol edin.
Çift tırnaklı bir dizgenin içinde aramayı süslü parantezle sarın, "{$user['email']}". Onlar olmadan PHP yalnızca tırnaksız "$user[email]" biçimini kabul eder ve bunu yanlış yazmak kolaydır.
Sıkça Sorulan Sorular
PHP'de nasıl ilişkisel dizi oluştururum?
Her çifti köşeli parantez içinde key => value olarak yazın: $prices = ['apple' => 1.2, 'pear' => 0.9];. Bir değeri $prices['apple'] ile okuyun.
PHP'de bir ilişkisel diziyi anahtara göre nasıl sıralarım?
A'dan Z'ye için ksort($arr);, Z'den A'ya için krsort($arr); çağırın. İkisi de yerinde sıralar, her değeri anahtarıyla birlikte tutar ve sıralanmış diziyi değil true döndürür.
PHP'de bir ilişkisel dizi üzerinde nasıl dolaşırım?
İki değişkenli foreach kullanın: foreach ($prices as $fruit => $price) { echo "$fruit: $price\n"; }. Çiftler eklendikleri sırayla gelir.
Bir ilişkisel dizinin tüm anahtarlarını nasıl alırım?
array_keys($arr) anahtarları indisli bir dizi olarak, array_values($arr) ise değerleri döndürür. array_keys($arr, $value) yalnızca değeri $value değerine eşit olan anahtarları döndürür.
PHP ilişkisel dizisi ekleme sırasını korur mu?
Evet. PHP dizileri sıralı eşlemelerdir, bu yüzden diziyi ksort(), asort() veya benzer bir fonksiyonla sıralayana kadar foreach, print_r ve json_encode çiftleri eklediğiniz sırayla görür.