是(isset(..)|| array_key_exists(...))检测空值的更快方法,而不仅仅是array_key_exists(...))?

Try*_*der 1 php arrays isset array-key-exists

在研究如何检测数组中的空值时,我在http://www.php.net/manual/en/function.array-key-exists.php手册页下看到了一些用户的评论.

它说

if (isset(..) || array_key_exists(...))
{
...
}
Run Code Online (Sandbox Code Playgroud)

比做更快

if array_key_exists(...))
{
...
}
Run Code Online (Sandbox Code Playgroud)

发布了100000次运行的基准测试

array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms
Run Code Online (Sandbox Code Playgroud)

我的问题:

(isset(..) || array_key_exists(...))不是更快array_key_exists()?如果是这样,为什么?

编辑:在写出这个问题时,我想我找到了答案.无论如何,我决定发布这个问题,看看我的想法是否正确.

Try*_*der 5

哪个更快取决于您正在检查的阵列.如果数组包含null,""或0 以外的

if (isset(..) || array_key_exists(...)){    
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会更快,因为isset将检查然后执行的代码.Array_key_exists不会运行.

如果数组包含null值,""或0 isset则将测试然后array_key_exists.这将比单独测试array_key_exists需要更长的时间.

因此,更快的问题在很大程度上取决于您正在检查的阵列.

很多人都说它并不重要.他们没有解释为什么它无关紧要.我猜他们的意思是速度提升非常小,不值得打扰.它们也可能意味着哪个更快取决于数组中指定的值(因此每次都不同.)

但最终,如果您知道大多数键将被赋予除null以外的值,""或0并且您确实需要确定何时分配空值,那么使用

if (isset(..) || array_key_exists(...)){    
}
Run Code Online (Sandbox Code Playgroud)