array_key_exists('key', $array) dizide o anahtar varsa true, yoksa false döndürür. Sıraya dikkat edin: önce anahtar, sonra dizi gelir. Anahtar altında saklanan değer null olsa bile true döndürür; isset() fonksiyonunun yapmadığı tek şey budur.
Bir anahtar yerine bir değeri kontrol etmek için in_array() kullanın.
array_key_exists ile isset karşılaştırması
İkisi de bir anahtarı kontrol eder. Yalnızca değer null olduğunda farklı sonuç verirler: isset() null bir değeri "ayarlanmamış" sayar, array_key_exists() ise dizide gerçekte ne olduğunu bildirir.
0 ve '' ikisi için de ayarlanmış sayılır; onları yalnızca null ayırır. Hangisini istediğiniz, verinizde null değerinin ne anlama geldiğine bağlıdır:
null"değer yok" anlamına geldiğindeisset()kullanın. Yaygın durum budur; bir dil yapısıdır (biraz daha hızlıdır) ve iç içe yolları ve tanımsız değişkenleri uyarı vermeden kabul eder.nulleksik bir anahtardan ayırt etmeniz gereken gerçek bir değer olduğundaarray_key_exists()kullanın:nullolarak gönderilmiş bir JSON alanı,NULLolan bir veritabanı sütunu, temizlemek için açıkçanullyapılmış bir seçenek.
isset sayfası aynı anda birkaç değişkeni kontrol etmek dahil diğer kullanımlarını anlatır.
Bir JSON verisinde null ile eksiği ayırt etme
Yalnızca array_key_exists() fonksiyonunun doğru yanıtı verdiği tipik bir durum: bir kaydı JSON'dan güncelleyen bir API. null olarak gönderilen bir alan "temizle", hiç gönderilmeyen bir alan "dokunma" anlamına gelir. isset() ikisini aynı görür.
isset($patch[$field]) ile telefon numarası kalırdı, çünkü null eksik bir alan gibi görünürdü.
key_exists() aynı fonksiyondur
key_exists(), PHP'nin ilk dönemlerinden kalma bir array_key_exists() takma adıdır. Aynı argümanlar, aynı sonuç. Okuyucuların görmeyi beklediği tam ismi tercih edin.
Anahtar türleri: "1" ve 1 aynı anahtardır
Dizi anahtarları tam sayı veya dizgedir ve düz bir ondalık tam sayı olan dizge tam sayı olarak saklanır. Yani array_key_exists('1', $arr) 1 anahtarını bulur, tersi de geçerlidir. '01' gibi bir dizge dizge olarak kalır ve farklı bir anahtardır.
İç içe anahtarları ve birkaç anahtarı kontrol etme
array_key_exists() tek bir seviyeye bakar. null değerinin önemli olmadığı iç içe bir yol için isset($a['x']['y']) her seviyeyi tek seferde kontrol eder. Önemli olduğu bir yol için kısa bir yardımcı fonksiyon seviyeleri yürür. Birkaç anahtarın hepsinin var olduğunu kontrol etmek için array_diff_key() ile karşılaştırın.
array_flip($required) isim listesini anahtarlara çevirir, böylece array_diff_key() onları girdinin anahtarlarıyla karşılaştırabilir; geriye kalan, bir hata mesajına hazır eksik alanlar listesidir.
Nesneler property_exists gerektirir
Eski PHP sürümleri array_key_exists() içinde bir nesne kabul ederdi. PHP 8 bunun yerine bir TypeError fırlatır. Nesneler için property_exists() tanımlı veya dinamik bir özelliği (null yapılmış olsa bile) kontrol eder; isset($obj->prop) ise dizilerdeki isset() gibi çalışır.
Son iki satır diğer yolu gösterir: get_object_vars() nesnenin erişilebilir özelliklerini bir diziye çevirir, ardından dizi fonksiyonları kullanılabilir.
Sıkça Sorulan Sorular
array_key_exists true döndürürken isset neden false döndürüyor?
Anahtar null tutuyor. isset($arr['k']) yalnızca anahtar var ve değeri null değilse true olur; array_key_exists('k', $arr) ise anahtar dizide olduğu her durumda true olur. 0, '' ve false dahil diğer her değer için ikisi aynı yanıtı verir.
PHP'de key_exists nedir?
array_key_exists() fonksiyonunun bir takma adıdır. key_exists('id', $row) ve array_key_exists('id', $row) aynı davranır. Kodların çoğu uzun ismi kullanır.
PHP'de iç içe bir anahtarın var olup olmadığını nasıl kontrol ederim?
Her seviyeyi kontrol edin: isset($data['user']['address']['city']) tüm yolu tek seferde kontrol eder ve bir seviye eksik olduğunda asla uyarı vermez. null değerlerin var sayılması gerekiyorsa yolu seviye seviye array_key_exists() ile yürüyün.
array_key_exists'i bir nesne üzerinde kullanabilir miyim?
Hayır. PHP 8.0'dan beri bir nesne vermek TypeError fırlatır. Tanımlı özellikler için property_exists($obj, 'name') ya da isset($obj->name) kullanın.