哪个更快,array_key_exists还是array_search?

sat*_*hia 11 php arrays performance

可能重复:
确定PHP中是否存在数组键有哪些更快更好?

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

你会宁愿

$friends[] = $friend
Run Code Online (Sandbox Code Playgroud)

要么

$friends[$friend] = 1;
Run Code Online (Sandbox Code Playgroud)

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

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

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

任何的想法?

Pat*_*her 28

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.