PHP 有兩個函數檢查鍵是否存在:array_key_exists() 與 isset()。關鍵差異在於對 null 值的處理。
| 函數 | 語法 | 鍵存在且值為 null | 鍵不存在 |
|---|---|---|---|
| array_key_exists() | array_key_exists(mixed $key, array $array) | true | false |
| isset() | isset($array[$key]) | false | false |
<?php
$array = ["Zero"=>"PHP", "One"=>"Perl", "Two"=>"Java", "Three"=>null];
var_dump(array_key_exists("One", $array)); // true
var_dump(array_key_exists("1", $array)); // false (字串 "1" !== 整數 1)
var_dump(isset($array["Two"])); // true
var_dump(isset($array[2])); // false (整數 2 !== 字串 "Two")
var_dump(array_key_exists("Three", $array)); // true
var_dump(isset($array["Three"])); // false (值為 null)
?>
array_key_exists()array_key_exists() 已大幅優化,差距縮小// 僅檢查鍵存在
if (isset($arr[$key]) || array_key_exists($key, $arr)) { ... }
// 取值並提供預設(PHP 7+)
$val = $arr[$key] ?? 'default';
若陣列轉為物件 (object)$arr,只能用 property_exists() 或 isset($obj->key)。
理解兩者差異,避免 null 值導致的邏輯錯誤。