首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP array_key_exists() vs isset() 差異深度解析:NULL 值、效能、適用範圍

     編輯:PHP 綜合知識

檢查陣列鍵名是否存在,array_key_exists() 與 isset() 是兩大常用函數,但行為有關鍵差異:NULL 值處理、效能、適用對象。本文深度對比並給出選型建議。

核心差異

場景array_key_exists()isset()
鍵存在,值為 NULLtruefalse
鍵存在,值非 NULLtruetrue
鍵不存在falsefalse
適用對象僅陣列陣列、變數、物件屬性
效能函數呼叫開銷語言結構,極快

代碼驗證

<?php
$arr = ['one' => '1', 'two' => '2', 'three' => null];

// array_key_exists:只檢查鍵
var_dump(array_key_exists('one', $arr));   // true
var_dump(array_key_exists('two', $arr));   // true
var_dump(array_key_exists('three', $arr)); // true ✅

// isset:檢查鍵且值非 NULL
var_dump(isset($arr['one']));   // true
var_dump(isset($arr['two']));   // true
var_dump(isset($arr['three'])); // false ❌
?>

效能測試(1000 萬次迴圈)

<?php
$arr = range(1, 1000);
$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) isset($arr[500]);
echo 'isset: ' . (microtime(true) - $start) . "s\n"; // ~0.35s

$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) array_key_exists(500, $arr);
echo 'array_key_exists: ' . (microtime(true) - $start) . "s\n"; // ~0.85s
?>

isset() 約快 2-3 倍(語言結構 vs 函數呼叫)。

選型建議

  1. 需區分「鍵不存在」vs「鍵存在但值為 NULL」 → array_key_exists()(如配置陣列、可選參數)。
  2. 只關心「鍵存在且值非 NULL」 → isset()(效能優、語法簡潔)。
  3. 檢查變數是否定義/非 NULL → 必須用 isset()(array_key_exists 不支援變數)。
  4. 物件屬性檢查 → isset($obj->prop) 或 property_exists()(後者不檢查值)。

進階:NULL 合併運算子 (PHP 7+)

<?php
$value = $arr['key'] ?? 'default'; // 鍵不存在或值為 NULL 時用 default
// 等同於:
$value = isset($arr['key']) ? $arr['key'] : 'default';
?>

結語

「鍵存在但值為 NULL」是兩者分水嶺。理解業務語義:是「未設定」還是「明確設為 NULL」?選對函數,避免邏輯 Bug,效能加分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved