可能重复:
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。
任何想法?
答案 0 :(得分:27)
array_key_exists
要快得多。 array_search
必须遍历整个数组,因此它是O(n)。 array_key_exists
是哈希表查找,因此它是O(1)。
如果您不熟悉此概念,请参阅http://en.wikipedia.org/wiki/Big_O_notation。
在array_key_exists
和isset
之间,虽然两者都非常快[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 。