在研究如何检测数组中的null值时,我在http://www.php.net/manual/en/function.array-key-exists.php手册页。
它说
if (isset(..) || array_key_exists(...))
{
...
}
比更快
if array_key_exists(...))
{
...
}
100000次跑步的基准点是
array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms
我的问题:
(isset(..) || array_key_exists(...))
比array_key_exists()
快吗?如果是,为什么?
编辑:写下这个问题,我想我找到了答案。我决定无论如何都发这个问题,看看我的想法是否正确。
哪个更快取决于您要检查的数组。如果数组包含值而不是null、"或0
if (isset(..) || array_key_exists(...)){
}
上述代码将更快,因为isset
将被检查,然后执行代码。Array_key_exists
将不会运行。
如果数组包含null、"或0的值,则将测试isset
,然后测试array_key_exists
。这将比单独测试array_key_exists花费更长的时间。
因此,哪个更快的问题在很大程度上取决于您正在检查的数组。
很多人都说这其实并不重要。他们没有解释为什么这无关紧要。我想他们的意思是速度的提高是如此之小,以至于不值得麻烦。它们也可能意味着哪个更快取决于数组中分配的值(因此每次都不同)
不过,如果您知道大多数密钥将被分配除null、"或0以外的值,并且您确实需要确定何时分配null值,那么使用
if (isset(..) || array_key_exists(...)){
}
很抱歉,要检测数组中的null值,您可以首先使用in_array检查数组,它会告诉您该数组是否包含"null"。我不太确定你想要实际实现什么,你想找到一个空值还是什么?当您告诉我们更多信息时,将进行编辑。
最可靠的方法是isset() || array_ky_exists()
,因为它检查最多,短路评估将加快这一过程。
然而,正如pst在评论中所说:It just doesn't matter
。真的,这最终几乎没有什么区别。
不过,基本上不是。最后,基础数学会告诉你,两次检查并不比一次检查快。