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 返回 false)bool快速检查数组键是否存在
​​array_key_exists($key, $array)​​检查键是否存在(即使值为 null)严格(null 仍返回 true)bool需要区分 null 和未定义键
​​array_search($value, $array)​​查找值并返回键名可选(strict=true)mixed(false 表示未找到)需要获取键名
​​in_array($value, $array)​​检查值是否存在可选(strict=true)bool仅检查值是否存在

​​关键区别​​

  • 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号