1

在研究如何检测数组中的空值时,我在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()?如果是这样,为什么?

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

4

3 回答 3

5

哪个更快取决于您正在检查的阵列。如果数组包含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(...)){    
}
于 2012-03-16T11:34:11.580 回答
0

Sorry, but to detect null values in an array, you can first CHECK the array using in_array which will tell you if the array even contains a "null". I'm not quite sure what you want to actually achieve, do you want to find a null value or what? Will edit when you tell us more.

于 2012-03-14T03:33:43.077 回答
0

可靠的方法是isset() || array_ky_exists()检查最多,短路评估将加快该过程。

但是,正如 pst 在评论中所说:It just doesn't matter. 真的,最终几乎没有区别。

基本上,不,不是。最后,基本数学会告诉您,两次检查并不比一次检查快。

于 2012-03-14T03:35:56.837 回答