【问题标题】:Fastest way to represent a collection of bits in PHP?在 PHP 中表示一组位的最快方法?
【发布时间】:2010-03-09 09:27:55
【问题描述】:

什么是表示位集合的好方法?

我有一组不同的开/关开关(数以千计),需要存储和检索它们的状态。天真的实现将是一个布尔数组,但我想知道是否有更好的方法(在访问速度和/或内存要求方面更好)。

我找到了这个 BitArray 实现,但它仅限于 32 位,这对于这种情况是不够的。

【问题讨论】:

    标签: php arrays data-structures


    【解决方案1】:

    另一种选择是将它们存储在整数块中的PHP_INT_SIZE*8 中,并使用bitwise operators 设置/取消设置它们。

    我无法评论此方法的速度或内存消耗,您可能需要进行一些基准测试。

    【讨论】:

      【解决方案2】:

      您可能想看看DataStructures in SPL。根据您的用例,它们可能比数组表现更好,例如当您知道集合的大小等时使用 FixedArray。对于大型数据集,这可能会有所不同。

      另一个想法是将选项连接成一个由 1 和 0 组成的字符串。由于字符串可以作为数组访问,因此您可以执行 $options[31] 来检索该位置的位。那么,您所需要的只是一张地图,说明哪个位置是哪个选项。

      不过,Yacoby 的解决方案在我看来是最可行的。

      【讨论】:

      • FixedArray 听起来不错;但是,对于字符串,我会为每个值浪费 7 位,对吗?我可以在每个字节中存储 8 位,但是再次访问将需要 ($options[31] & 4) 或类似的东西
      • @Piskvor 是的。它在存储方面效率不高。这就是为什么我会采用 Yacoby 建议的位掩码方法(如果内存是一个问题)。我只是想提供替代方案。
      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2023-03-28
        • 2016-09-02
        • 1970-01-01
        • 2011-11-08
        相关资源
        最近更新 更多