我想在这个问题上加上2美分,因为我错过了中间的出路。
如前所述,isset()
将评估键的值,因此false
如果该值是null
,array_key_exists()
它将返回,它将仅检查键是否在数组中。
我已经使用PHP 7运行了一个简单的基准测试,显示的结果是完成迭代所需的时间:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
我还添加了此自定义函数的结果以及此基准,以便完成:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
如前所述,isset()
这是最快的方法,但如果值为,则可以返回false null
。这可能会产生不想要的结果,通常array_key_exists()
是这样。
但是,有一个中间的出路,那就是使用isset() || array_key_exists()
。该代码通常使用更快的功能isset()
,如果 仅isset()
返回false,则用于array_key_exists()
验证。如上表所示,其调用速度与普通调用一样快isset()
。
是的,编写和将其包装到函数中的过程要慢一些,但要容易得多。如果您需要这样做以提高性能,检查大数据等内容将其全部写出,否则,如果仅使用1次而在功能array_key_isset()
上的开销很小,则可以忽略不计。