Я использовал побитовые операторы и маски только один раз на SQL сервере много лет go. Это был простой переключатель флажков 2/4/8/16. На этот раз, прочитав многочисленные статьи и статью в Википедии о масках, я все еще не могу осмыслить это. Может быть, мое мышление здесь совершенно неверно, и я не могу использовать маски, но пока я также не нашел окончательной причины, почему бы и нет.
У меня 4 категории в моем форма в PHP со следующими значениями:
$category1 = ["one", "two", "three"];
$category2 = ["one", "two", "three"];
$category3 = ["one", "two"];
$category4 = ["one", "two", "three", "four"];
Тогда у меня есть огромное количество флажков, которые мне нужно показать / скрыть в зависимости от того, принадлежат ли они к определенной комбинации c этих категорий. Они могут принадлежать многим одновременно.
Допустим, у меня есть один флажок:
<input type="checkbox" name="some_name[]" value="some_value" />
Теперь этот флажок может отображаться в любой из этих комбинаций:
category1 = "one" AND category2 = "two" AND category3 = "one" AND category4 = "four"
category1 = "one" AND category2 = "one" AND category3 = "one" AND category4 = "one"
category1 = "one" AND category2 = "one" AND category3 = "two" AND category4 = "three"
Сначала я пробовал присвоить значения категориям, так что:
category1_value = 1 + <array_index_of_the_value+1>
category2_value = 10 + <array_index_of_the_value+1>
category3_value = 100 + <array_index_of_the_value+1>
category4_value = 1000 + <array_index_of_the_value+1>
Но я не могу понять как установить одно значение / класс / атрибут данных это позволило бы мне выполнить операцию с битовой маской, чтобы показать это, когда выбрана конкретная c комбинация категорий.
Затем я попытался умножить каждое число, но это даже не дало мне уникальные значения для каждой комбинации, такие же, как если бы я применил 2
, 4
, 8
и 16
соответственно к каждой категории, а затем просто умножил каждую комбинацию.
При написании этого поста я начал сомневаюсь, смогу ли я сделать это в одной маске. Потому что они не каскадные, а категоричные. Это означает, что большее число не допускает всех комбинаций "нижних" .
Однако я могу ошибаться и, возможно, есть способ. Любая помощь будет принята с благодарностью.
- edit
На самом деле, чтобы сделать вещи еще более сложными, $category4
на самом деле является каскадной категорией, что означает, что значение four
должно отображать все one
, two
и three
.