【问题标题】:which is faster, array_key_exists or array_search? [duplicate]哪个更快,array_key_exists 或 array_search? [复制]
【发布时间】:2023-03-04 18:51:01
【问题描述】:

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

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

你愿意

$friends[] = $friend

$friends[$friend] = 1;

基本原理是在不影响速度的情况下尽可能多地节省内存。 我没有找到任何可以帮助我解决小困境的 php 5.3.8 案例研究: 在负载下,哪个执行速度更快?

array_key_exists 还是 in_array? (即:foo 是 bar 的朋友吗?)

另外,有时我需要获取整个朋友列表,所以我需要迭代整个列表以构建朋友数组。完全不确定第二种方法,因为我还不知道是否会有更多的 array_search|array_key_exists|in_array 或获取完整的朋友列表。

有什么想法吗?

【问题讨论】:

  • 您是否尝试过自己制作基准脚本并对其进行测试?这也是 SO 上几乎所有其他 php 数组速度问题的副本......
  • 还没有,我当然可以对此做一些基准测试。我很想知道是否有人真的可以争论这里的良好做法应该是什么。我将发布基准
  • 良好实践很大程度上取决于您所处的环境。我以前因为我的环境因素不同而被别人追随(什么有效)而被烧毁。 (+当你自己做东西时你会发现令人惊讶的东西)
  • @DaveRandom 不是骗子,因为 array_search()array_key_exists() 做不同的事情 :)
  • @Jack array_search 从一开始就没有地方可待。

标签: php arrays performance


【解决方案1】:

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

我认为 PHP 检查密钥(array_key_exists() 或简单的 isset($array[$key]))会更快。要搜索一个值,PHP 必须循环遍历数组;搜索关键字 PHP 将使用哈希函数。

您可以阅读更多on stackoverflow

【讨论】:

    【解决方案2】:

    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

    【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2011-06-13
    • 1970-01-01
    • 2011-05-20
    • 2011-04-08
    相关资源
    最近更新 更多