isset()、array_key_exists()、array_search() 和 in_array()性能比较

   2025-06-03 18:21:40

php

在 PHP 中,isset()array_key_exists()array_search() 和 in_array() 都可以用于检查某个值或键是否存在,但它们的用途和性能差异较大。下面详细对比它们的区别和性能表现。


​1. 功能区别​

函数作用严格模式返回值适用场景
isset($array[$key])检查键是否存在(包括 null 键)不严格(null 返回 falsebool快速检查数组键是否存在
array_key_exists($key, $array)检查键是否存在(即使值为 null严格(null 仍返回 truebool需要区分 null 和未定义键
array_search($value, $array)查找值并返回键名可选(strict=truemixedfalse 表示未找到)需要获取键名
in_array($value, $array)检查值是否存在可选(strict=truebool仅检查值是否存在

​关键区别​

  • isset() 和 array_key_exists() 用于 ​​键查找​​(O(1) 时间复杂度)。
  • array_search() 和 in_array() 用于 ​​值查找​​(O(n) 时间复杂度)。
  • isset() 比 array_key_exists() 更快,但无法检测 null 键。
  • array_search() 比 in_array() 稍慢,但可以返回键名。

​2. 性能对比​

​测试代码​

php
复制
$array = range(1, 100000); // 10万元素的数组 $key = 50000; $value = 50000; // 测试 isset() $start = microtime(true); isset($array[$key]); $timeIsset = microtime(true) - $start; // 测试 array_key_exists() $start = microtime(true); array_key_exists($key, $array); $timeArrayKeyExists = microtime(true) - $start; // 测试 array_search() $start = microtime(true); array_search($value, $array); $timeArraySearch = microtime(true) - $start; // 测试 in_array() $start = microtime(true); in_array($value, $array); $timeInArray = microtime(true) - $start; echo "isset(): $timeIsset s\n"; echo "array_key_exists(): $timeArrayKeyExists s\n"; echo "array_search(): $timeArraySearch s\n"; echo "in_array(): $timeInArray s\n";

​结果(PHP 8.1)​

函数时间复杂度10万次查询时间(示例)
isset()O(1)0.000002s
array_key_exists()O(1)0.000003s
array_search()O(n)0.003s
in_array()O(n)0.002s

相关评论:

靡不有初|  当前时间:  |  网站运行时间:  |鲜克有终

今年剩余【农历】:

粤ICP备19080315号