Похоже, что вы действительно ищете, это побитовое решение.Используя биты, вы можете хранить множество логических ключей в одном целом числе.В этом ответе используются некоторые обходные пути, чтобы все было понятно - вы можете использовать значения int напрямую вместо значения pow (2, X), показанного ниже ... считайте, что это «учить человека ловить рыбу».
Если вы 'Мне бы хотелось более лаконичного, хотя и сложного для понимания решения, взглянуть на ответ Аст Дерек.Они оба делают одно и то же и работают по одному и тому же принципу.
Чтобы сохранить их, давайте сделаем два простых переключателя:
switch($_GET['x']) {
case 'Email': $x = pow(2,0); break; // 1
case 'Sms': $x = pow(2,1); break; // 2
case 'Both': $x = pow(2,0) + pow(2,1); break;// 3
default: $x = 0;
}
switch($_GET['y']) {
case 'Email': $y = pow(2,2); echo "Y Email"; break; // 4
case 'Sms': $y = pow(2,3); echo "Y SMS"; break; // 8
case 'Both': $y = pow(2,2) + pow(2,3); echo "Y Both"; break; // 12
default: $y = 0;
}
Как видите, опции None отсутствуют.,Нет просто отсутствие электронной почты или SMS.Кроме того, опция Both определяется не как отдельная опция, а как комбинация обоих.
Теперь, когда у нас есть эти значения, мы можем объединить эти два числа в одно число, так как их соответствующие биты обав разных диапазонах.
$z = $x | $y;
Что произойдет, если взглянуть на биты, - это предположить, что у нас есть X = Email и Y = Оба.
x = 0001 -> (0 + 0 + 0 + 1) -> 1
y = 1100 -> (8 + 4 + 0 + 0) -> 12
-----
OR: 1101 -> (8 + 4 + 0 + 1) -> 13
Что этодаст вам следующие возможные результаты:
0: x = none, y = none
1: x = email, y = none
2: x = sms, y = none
3: x = both, y = none
4: x = none, y = email
5: x = email, y = email
6: x = sms, y = email
7: x = both, y = email
8: x = none, y = sms
9: x = email, y = sms
10: x = sms, y = sms
11: x = both, y = sms
12: x = none, y = both
13: x = email, y = both
14: x = sms, y = both
15: x = both, y = both
Чтобы определить, какие из них выбраны, просто поверните операцию в обратном направлении.
Чтобы вы могли проверить вещи, я поместил всю настройку вGithub Gist для вас, чтобы наслаждаться и возиться с: http://gist.github.com/505272
Не стесняйтесь спрашивать, если вам нужны разъяснения;Я не уверен, что объяснил это очень четко: /