Самый быстрый способ представить коллекцию битов в PHP? - PullRequest
1 голос
/ 09 марта 2010

Что такое хороший способ для представления набора битов?

У меня есть набор различных переключателей вкл / выкл (их тысячи), и мне нужно сохранить и восстановить их состояние. Наивной реализацией будет массив логических значений, но мне интересно, есть ли лучший способ (лучше с точки зрения скорости доступа и / или требований к памяти).

Я нашел эту реализацию BitArray , но она ограничена 32 битами, что недостаточно для этого случая.

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

Другой вариант - хранить их в блоках PHP_INT_SIZE*8 в целых числах и использовать побитовые операторы для их установки / сброса.

Я не могу комментировать скорости или потребление памяти этим методом, возможно, вам придется провести некоторые тесты.

2 голосов
/ 09 марта 2010

Возможно, вы захотите взглянуть на DataStructures в SPL . В зависимости от вашего UseCase они могут работать лучше, чем массив, например используйте FixedArray, когда вы знаете размер вашей коллекции и т. д. Для больших наборов данных это может иметь значение.

Другой идеей было бы просто объединить опции в одну строку из 1 и 0. Поскольку к строкам можно обращаться как к массивам, вы можете затем сделать $ options [31], чтобы получить бит в этой позиции. Все, что вам нужно, это карта того, какая позиция и какой вариант.

Тем не менее, решение Якоби звучит для меня наиболее реально.

1 голос
/ 09 марта 2010

GMP имеет битовые функции, такие как http://www.php.net/manual/en/function.gmp-clrbit.php

...