array_key_exists() 專門檢查鍵名是否存在於陣列中,**即使值為 null 也回傳 true**,這是與 isset() 最大的差異。
bool array_key_exists(mixed $key, array $array)
$arr = ['id'=>1, 'name'=>'admin', 'email'=>null];
array_key_exists('name', $arr); // true
array_key_exists('email', $arr); // true (值為 null 仍存在)
array_key_exists('age', $arr); // false
isset($arr['name']); // true
isset($arr['email']); // false (值為 null → false)
isset($arr['age']); // false
| 情境 | array_key_exists() | isset() |
|---|---|---|
| 鍵存在、值非 null | true | true |
| 鍵存在、值為 null | true | false |
| 鍵不存在 | false | false |
| 效能 | 較慢(函式呼叫) | 極快(語言結構) |
| 適用物件 | 陣列、物件屬性 | 變數、陣列元素、物件屬性 |
array_key_exists()isset()(效能更好)isset()property_exists($obj, 'prop')class User {
public $name = 'John';
private $secret = 'hidden';
}
$user = new User();
array_key_exists('name', $user); // true (public 屬性)
array_key_exists('secret', $user); // true (private 也可檢測)
isset($user->name); // true
isset($user->secret); // false (私有屬性不可從外部 isset)
理解「鍵名存在」與「值非 null」的語意差異,根據業務需求選擇 array_key_exists() 或 isset(),兼顧正確性與效能。