2010-03-09 4 views
1

Quelle est une bonne façon de représenter une collection de bits?Le moyen le plus rapide de représenter une collection de bits en PHP?

J'ai un ensemble de divers bascules on/off (milliers d'entre eux) et besoin de stocker et de récupérer leur état. L'implémentation naïve serait un tableau de booléens, mais je me demande s'il existe un meilleur moyen (meilleur en termes de vitesse d'accès et/ou de besoins en mémoire).

J'ai trouvé cette implémentation BitArray, mais elle est limitée à 32 bits, ce qui n'est pas suffisant dans ce cas.

Répondre

4

Une autre option consiste à les stocker dans des blocs de PHP_INT_SIZE*8 en nombres entiers et à utiliser bitwise operators pour les définir/les annuler.

Je ne peux pas commenter sur les vitesses ou la consommation de mémoire de cette méthode, vous devrez peut-être faire quelques benchmarking.

2

Vous pouvez jeter un oeil à la DataStructures in SPL. Selon votre UseCase, ils peuvent fonctionner mieux qu'un tableau, par exemple. utilisez un FixedArray lorsque vous connaissez la taille de votre collection, etc. Pour les grands ensembles de données, cela peut faire la différence.

Une autre idée serait juste concaténer les options en une seule chaîne de 1 et de 0. Puisque les chaînes peuvent être accédées sous forme de tableaux, vous pouvez alors faire des options $ [31] pour récupérer le bit à cette position. Tout ce dont vous avez besoin alors, est une carte de quelle position est quelle option.

encore, la solution de Yacoby me semble le plus possible cependant.

+0

le FixedArray sonne bien; Cependant, avec la chaîne je perdrais 7 bits pour chaque valeur, non? Je pourrais être le stockage 8 bits dans chaque octet, mais encore une fois l'accès sera nécessaire ($ options [31] et 4) ou quelque chose comme ça – Piskvor

+0

@Piskvor oui. Ce n'est pas très efficace en termes de stockage. C'est pourquoi j'irais avec l'approche de masque de bits suggérée par Yacoby (si la mémoire est un problème). J'essaie juste de donner des alternatives. – Gordon

Questions connexes