PHP array_key_exists() Fonksiyonu
Dizi içerisinde belirtilen anahtarın olup olmadığını kontrol eder.
Yapısı (Syntax)array_key_exists ( mixed $key , array $array ) : bool
Parametreler
-
$key mixedKontrol edilecek anahtarın adı
-
$array arrayKontrol edilecek dizi
Dönen Değer
boolean
- Kontrol edilen anahtar dizi içerisinde var ise TRUE yok ise FALSE döner.
Örnekler
En basit haliyle örnek vermek gerekirse;
<?php
$dizi = [
'ad' => 'Tayfun',
'soyad' => 'Erbilen'
];
if ( array_key_exists('soyad', $dizi) ){
echo '$dizi içerisinde "soyad" anahtarı bulunuyor';
}
?>
Eğer dizi değeri NULL ise isset()
ile kontrol etmek doğru bir kontrol olmaz, zira NULL değerli kontrollerde isset()
FALSE değeri döndürecektir.
<?php
$dizi = [
'ad' => 'Tayfun',
'soyad' => 'Erbilen',
'yas' => NULL
];
var_dump(isset($dizi['yas'])); // Çıktı: bool(false)
var_dump(array_key_exists('yas', $dizi)); // Çıktı: bool(true)
?>
Ayrıca objelerinde kontrolünü yapabiliyorsunuz. Sınıf içinde private ya da protected olarak tanımlanmadığı sürece kontrolü yapılabilir ancak php tarafından 2. parametrenin her zaman array olması öneriliyor. Bu gibi durumlarda en doğru sonuç için property_exists()
fonksiyonunu kullanın.
<?php
class Test
{
private $test1;
protected $test2;
public $test3;
public $test4 = "Linux";
}
$php = new Test();
var_dump(array_key_exists('test1', $php)); // Çıktı: bool(false)
var_dump(array_key_exists('test2', $php)); // Çıktı: bool(false)
var_dump(array_key_exists('test3', $php)); // Çıktı: bool(true)
var_dump(array_key_exists('test4', $php)); // Çıktı: bool(true)
?>
İç içe dizilerde fonksiyon işlevini yerine getirmemektedir. Bunun için kendiniz aşağıdaki gibi bir alternatif fonksiyon yazabilirsiniz.
<?php
function _array_key_exists($cur_key, $arr){
if ( array_key_exists($cur_key, $arr) )
return true;
else
foreach ($arr as $key => $val)
if (is_array($val)) return _array_key_exists($cur_key, $val);
}
$arr = [
'ad' => 'tayfun',
'soyad' => 'erbilen',
'a' => [
'b' => [
'c' => 'd'
]
]
];
echo _array_key_exists('c', $arr); // Çıktı: 1