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