哪个更快,array_key_exists还是array_search?

时间:2011-12-06 13:54:26

标签: php arrays performance

  

可能重复:
  What’s quicker and better to determine if an array key exists in PHP?

假设我想存储我在memcache上的朋友列表。 有时我需要搜索用户是否在我的列表中,有时我需要获取所有朋友列表。

你愿意

吗?
$friends[] = $friend

$friends[$friend] = 1;

理由是在没有惩罚速度的情况下尽可能地保存公羊。 我没有找到任何关于php 5.3.8的案例研究可以帮助我解决我的小困境: 在负载下,执行得更快?

array_key_exists还是in_array? (即:foo是酒吧的朋友?)

此外,有时我需要获取整个朋友列表,所以我需要迭代整个列表以构建一个朋友阵列。我不确定第二种方法,因为我还不知道是否会有更多的array_search | array_key_exists | in_array或fetch of full friends list。

任何想法?

2 个答案:

答案 0 :(得分:27)

array_key_exists要快得多。 array_search必须遍历整个数组,因此它是O(n)。 array_key_exists是哈希表查找,因此它是O(1)。

如果您不熟悉此概念,请参阅http://en.wikipedia.org/wiki/Big_O_notation

array_key_existsisset之间,虽然两者都非常快[O(1)],但isset明显更快。如果此检查发生了数千次,则您需要使用isset。

应该注意的是,它们并不相同 - 当数组键存在但值为null时,isset将返回false,array_key_exists将返回true。如果值为null,则需要使用array_key_exists

答案 1 :(得分:2)

您可以自己进行简单的测试。无论如何,如果$friends应该包含唯一元素(没有重复值!! ),您可以使用键来存储它们。

我认为PHP检查密钥(array_key_exists()或简称isset($array[$key]))的速度更快。要搜索值,PHP必须遍历数组;搜索密钥PHP将使用哈希函数。

您可以阅读更多 on stackoverflow